15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// CythonFunction.proto ////////////////////
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_USED 1
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <structmember.h>
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CYFUNCTION_CCLASS        0x04
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_GetClosure(f) \
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (((__pyx_CyFunctionObject *) (f))->func_closure)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_GetClassObj(f) \
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (((__pyx_CyFunctionObject *) (f))->func_classobj)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_Defaults(type, f) \
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct {
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyCFunctionObject func;
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_dict;
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_weakreflist;
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_name;
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_qualname;
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_doc;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_globals;
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_code;
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_closure;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_classobj; /* No-args super() class cell */
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* Dynamic default args and annotations */
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void *defaults;
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int defaults_pyobjects;
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int flags;
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* Defaults info */
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *defaults_tuple;   /* Const defaults tuple */
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *defaults_kwdict;  /* Const kwonly defaults dict */
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *(*defaults_getter)(PyObject *);
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *func_annotations; /* function annotations dict */
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} __pyx_CyFunctionObject;
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject *__pyx_CyFunctionType = 0;
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      int flags, PyObject* qualname,
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      PyObject *self,
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      PyObject *module, PyObject *globals,
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      PyObject* code);
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         size_t size,
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         int pyobjects);
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                            PyObject *tuple);
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                             PyObject *dict);
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                              PyObject *dict);
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_CyFunction_init(void);
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// CythonFunction ////////////////////
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CommonTypes.c::FetchCommonType
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)////@requires: ObjectHandling.c::PyObjectGetAttrStr
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(op->func_doc == NULL)) {
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (op->func.m_ml->ml_doc) {
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (unlikely(op->func_doc == NULL))
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return NULL;
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_INCREF(Py_None);
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return Py_None;
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_doc);
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return op->func_doc;
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *tmp = op->func_doc;
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (value == NULL)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        value = Py_None; /* Mark as deleted */
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_doc = value;
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(op->func_name == NULL)) {
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(op->func_name == NULL))
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_name);
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return op->func_name;
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *tmp;
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(value == NULL || !PyString_Check(value))) {
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__name__ must be set to a string object");
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->func_name;
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_name = value;
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op)
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_qualname);
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return op->func_qualname;
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value)
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *tmp;
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(value == NULL || !PyString_Check(value))) {
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__qualname__ must be set to a string object");
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->func_qualname;
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_qualname = value;
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *self;
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    self = m->func_closure;
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (self == NULL)
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self = Py_None;
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(self);
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return self;
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(op->func_dict == NULL)) {
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        op->func_dict = PyDict_New();
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(op->func_dict == NULL))
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_dict);
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return op->func_dict;
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *tmp;
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(value == NULL)) {
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)               "function's dictionary may not be deleted");
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!PyDict_Check(value))) {
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)               "setting function's dictionary to a non-dict");
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->func_dict;
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_dict = value;
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op)
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_globals);
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return op->func_globals;
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(Py_None);
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return Py_None;
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* result = (op->func_code) ? op->func_code : Py_None;
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(result);
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *res = op->defaults_getter((PyObject *) op);
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!res))
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* Cache result */
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->defaults_tuple);
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->defaults_kwdict);
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(res);
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) {
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* tmp;
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!value) {
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        // del => explicit None to prevent rebuilding
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        value = Py_None;
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (value != Py_None && !PyTuple_Check(value)) {
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__defaults__ must be set to a tuple object");
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->defaults_tuple;
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_tuple = value;
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) {
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* result = op->defaults_tuple;
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!result)) {
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (op->defaults_getter) {
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = op->defaults_tuple;
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = Py_None;
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(result);
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) {
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* tmp;
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!value) {
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        // del => explicit None to prevent rebuilding
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        value = Py_None;
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (value != Py_None && !PyDict_Check(value)) {
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__kwdefaults__ must be set to a dict object");
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(value);
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->defaults_kwdict;
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_kwdict = value;
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) {
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* result = op->defaults_kwdict;
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!result)) {
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (op->defaults_getter) {
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = op->defaults_kwdict;
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result = Py_None;
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(result);
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) {
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* tmp;
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!value || value == Py_None) {
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        value = NULL;
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (!PyDict_Check(value)) {
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError,
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__annotations__ must be set to a dict object");
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(value);
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp = op->func_annotations;
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_annotations = value;
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(tmp);
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) {
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* result = op->func_annotations;
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!result)) {
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        result = PyDict_New();
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(!result)) return NULL;
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        op->func_annotations = result;
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(result);
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//#if PY_VERSION_HEX >= 0x030400C1
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//static PyObject *
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//__Pyx_CyFunction_get_signature(__pyx_CyFunctionObject *op) {
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    PyObject *inspect_module, *signature_class, *signature;
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    // from inspect import Signature
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    inspect_module = PyImport_ImportModuleLevelObject(PYIDENT("inspect"), NULL, NULL, NULL, 0);
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    if (unlikely(!inspect_module))
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//        goto bad;
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    signature_class = __Pyx_PyObject_GetAttrStr(inspect_module, PYIDENT("Signature"));
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    Py_DECREF(inspect_module);
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    if (unlikely(!signature_class))
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//        goto bad;
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    // return Signature.from_function(op)
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    signature = PyObject_CallMethodObjArgs(signature_class, PYIDENT("from_function"), op, NULL);
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    Py_DECREF(signature_class);
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    if (likely(signature))
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//        return signature;
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//bad:
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    // make sure we raise an AttributeError from this property on any errors
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//        PyErr_SetString(PyExc_AttributeError, "failed to calculate __signature__");
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    return NULL;
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//}
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//#endif
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyGetSetDef __pyx_CyFunction_getsets[] = {
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//#if PY_VERSION_HEX >= 0x030400C1
3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//    {(char *) "__signature__", (getter)__Pyx_CyFunction_get_signature, 0, 0, 0},
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//#endif
3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {0, 0, 0, 0, 0}
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define PY_WRITE_RESTRICTED WRITE_RESTRICTED
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyMemberDef __pyx_CyFunction_members[] = {
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {0, 0, 0,  0, 0}
4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyUnicode_FromString(m->func.m_ml->ml_name);
4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyString_FromString(m->func.m_ml->ml_name);
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyMethodDef __pyx_CyFunction_methods[] = {
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {0, 0, 0, 0}
4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (op == NULL)
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->flags = flags;
4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_weakreflist = NULL;
4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func.m_ml = ml;
4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func.m_self = (PyObject *) op;
4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(closure);
4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_closure = closure;
4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(module);
4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func.m_module = module;
4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_dict = NULL;
4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_name = NULL;
4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(qualname);
4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_qualname = qualname;
4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_doc = NULL;
4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_classobj = NULL;
4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_globals = globals;
4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(op->func_globals);
4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(code);
4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_code = code;
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* Dynamic Default args */
4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_pyobjects = 0;
4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults = NULL;
4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_tuple = NULL;
4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_kwdict = NULL;
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->defaults_getter = NULL;
4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    op->func_annotations = NULL;
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject_GC_Track(op);
4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (PyObject *) op;
4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_closure);
4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func.m_module);
4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_dict);
4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_name);
4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_qualname);
4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_doc);
4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_globals);
4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_code);
4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_classobj);
4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->defaults_tuple);
4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->defaults_kwdict);
4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(m->func_annotations);
4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (m->defaults) {
4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int i;
4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < m->defaults_pyobjects; i++)
4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_XDECREF(pydefaults[i]);
4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyMem_Free(m->defaults);
4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        m->defaults = NULL;
4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject_GC_UnTrack(m);
4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (m->func_weakreflist != NULL)
4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject_ClearWeakRefs((PyObject *) m);
4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_CyFunction_clear(m);
4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject_GC_Del(m);
4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_closure);
5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func.m_module);
5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_dict);
5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_name);
5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_qualname);
5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_doc);
5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_globals);
5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_code);
5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->func_classobj);
5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->defaults_tuple);
5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(m->defaults_kwdict);
5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (m->defaults) {
5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int i;
5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < m->defaults_pyobjects; i++)
5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_VISIT(pydefaults[i]);
5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_INCREF(func);
5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return func;
5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (type == NULL)
5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            type = (PyObject *)(Py_TYPE(obj));
5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyMethod_New(func,
5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                            type, (PyObject *)(Py_TYPE(type)));
5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (obj == Py_None)
5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        obj = NULL;
5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyMethod_New(func, obj, type);
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject*
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION >= 3
5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyUnicode_FromFormat("<cyfunction %U at %p>",
5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                op->func_qualname, (void *)op);
5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return PyString_FromFormat("<cyfunction %s at %p>",
5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                               PyString_AsString(op->func_qualname), (void *)op);
5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY
5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* originally copied from PyCFunction_Call() in CPython's Objects/methodobject.c */
5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* PyPy does not have this function */
5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyCFunctionObject* f = (PyCFunctionObject*)func;
5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *self = PyCFunction_GET_SELF(func);
5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t size;
5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case METH_VARARGS:
5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (likely(kw == NULL) || PyDict_Size(kw) == 0)
5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return (*meth)(self, arg);
5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case METH_VARARGS | METH_KEYWORDS:
5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case METH_NOARGS:
5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            size = PyTuple_GET_SIZE(arg);
5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (size == 0)
5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return (*meth)(self, NULL);
5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_Format(PyExc_TypeError,
5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                "%.200s() takes no arguments (%zd given)",
5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                f->m_ml->ml_name, size);
5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case METH_O:
5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (likely(kw == NULL) || PyDict_Size(kw) == 0) {
5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            size = PyTuple_GET_SIZE(arg);
5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (size == 1)
5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_Format(PyExc_TypeError,
5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                "%.200s() takes exactly one argument (%zd given)",
5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                f->m_ml->ml_name, size);
5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        break;
5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    default:
5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        "longer supported!");
5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                 f->m_ml->ml_name);
6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	return PyCFunction_Call(func, arg, kw);
6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject __pyx_CyFunctionType_type = {
6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyVarObject_HEAD_INIT(0, 0)
6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/
6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    sizeof(__pyx_CyFunctionObject),   /*tp_basicsize*/
6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_itemsize*/
6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/
6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_print*/
6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_getattr*/
6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_setattr*/
6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_compare*/
6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*reserved*/
6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (reprfunc) __Pyx_CyFunction_repr,   /*tp_repr*/
6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_number*/
6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_sequence*/
6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_mapping*/
6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_hash*/
6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_CyFunction_Call,              /*tp_call*/
6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_str*/
6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_getattro*/
6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_setattro*/
6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_buffer*/
6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/
6375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_doc*/
6385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (traverseproc) __Pyx_CyFunction_traverse,   /*tp_traverse*/
6395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (inquiry) __Pyx_CyFunction_clear,   /*tp_clear*/
6405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_richcompare*/
6415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */
6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_iter*/
6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_iternext*/
6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunction_methods,           /*tp_methods*/
6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunction_members,           /*tp_members*/
6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunction_getsets,           /*tp_getset*/
6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_base*/
6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_dict*/
6495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_CyFunction_descr_get,         /*tp_descr_get*/
6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_descr_set*/
6515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/
6525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_init*/
6535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_alloc*/
6545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_new*/
6555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_free*/
6565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_is_gc*/
6575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_bases*/
6585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_mro*/
6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_cache*/
6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_subclasses*/
6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_weaklist*/
6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_del*/
6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000
6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_version_tag*/
6655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x030400a1
6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_finalize*/
6685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
6705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_CyFunction_init(void) {
6735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !CYTHON_COMPILING_IN_PYPY
6745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // avoid a useless level of call indirection
6755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
6765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
6775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (__pyx_CyFunctionType == NULL) {
6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    m->defaults = PyMem_Malloc(size);
6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!m->defaults)
6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyErr_NoMemory();
6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    memset(m->defaults, 0, size);
6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    m->defaults_pyobjects = pyobjects;
6925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return m->defaults;
6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
6965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
6975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    m->defaults_tuple = tuple;
6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(tuple);
6995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
7025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
7035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    m->defaults_kwdict = dict;
7045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(dict);
7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    m->func_annotations = dict;
7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_INCREF(dict);
7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// CyFunctionClassCell.proto ////////////////////
7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_InitClassCell(PyObject *cyfunctions,
7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                         PyObject *classobj);
7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// CyFunctionClassCell ////////////////////
7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CythonFunction
7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static CYTHON_INLINE void __Pyx_CyFunction_InitClassCell(PyObject *cyfunctions, PyObject *classobj) {
7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int i;
7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    for (i = 0; i < PyList_GET_SIZE(cyfunctions); i++) {
7245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        __pyx_CyFunctionObject *m =
7255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            (__pyx_CyFunctionObject *) PyList_GET_ITEM(cyfunctions, i);
7265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        m->func_classobj = classobj;
7275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_INCREF(classobj);
7285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// FusedFunction.proto ////////////////////
7325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef struct {
7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunctionObject func;
7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *__signatures__;
7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *type;
7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *self;
7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} __pyx_FusedFunctionObject;
7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __pyx_FusedFunction_NewEx(ml, flags, qualname, self, module, globals, code)         \
7405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        __pyx_FusedFunction_New(__pyx_FusedFunctionType, ml, flags, qualname, self, module, globals, code)
7415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__pyx_FusedFunction_New(PyTypeObject *type,
7425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         PyMethodDef *ml, int flags,
7435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         PyObject *qualname, PyObject *self,
7445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         PyObject *module, PyObject *globals,
7455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         PyObject *code);
7465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self);
7485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject *__pyx_FusedFunctionType = NULL;
7495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __pyx_FusedFunction_init(void);
7505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_FusedFunction_USED
7525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// FusedFunction ////////////////////
7545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: CythonFunction
7555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
7575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags,
7585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        PyObject *qualname, PyObject *self,
7595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        PyObject *module, PyObject *globals,
7605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        PyObject *code)
7615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionObject *fusedfunc =
7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        (__pyx_FusedFunctionObject *) __Pyx_CyFunction_New(type, ml, flags, qualname,
7645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                           self, module, globals, code);
7655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!fusedfunc)
7665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
7675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    fusedfunc->__signatures__ = NULL;
7695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    fusedfunc->type = NULL;
7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    fusedfunc->self = NULL;
7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (PyObject *) fusedfunc;
7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void __pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self) {
7755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunction_clear(self);
7765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionType->tp_free((PyObject *) self);
7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self,
7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             visitproc visit,
7825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             void *arg)
7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(self->self);
7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(self->type);
7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_VISIT(self->__signatures__);
7875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg);
7885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int
7915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self)
7925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
7935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(self->self);
7945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(self->type);
7955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_CLEAR(self->__signatures__);
7965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self);
7975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
7985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
8015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type)
8025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
8035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionObject *func, *meth;
8045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    func = (__pyx_FusedFunctionObject *) self;
8065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (func->self || func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD) {
8085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* Do not allow rebinding and don't do anything for static methods */
8095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_INCREF(self);
8105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return self;
8115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
8125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (obj == Py_None)
8145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        obj = NULL;
8155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_NewEx(
8175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((PyCFunctionObject *) func)->m_ml,
8185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((__pyx_CyFunctionObject *) func)->flags,
8195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((__pyx_CyFunctionObject *) func)->func_qualname,
8205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((__pyx_CyFunctionObject *) func)->func_closure,
8215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((PyCFunctionObject *) func)->m_module,
8225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((__pyx_CyFunctionObject *) func)->func_globals,
8235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    ((__pyx_CyFunctionObject *) func)->func_code);
8245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!meth)
8255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
8265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(func->func.func_classobj);
8285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth->func.func_classobj = func->func.func_classobj;
8295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(func->__signatures__);
8315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth->__signatures__ = func->__signatures__;
8325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(type);
8345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth->type = type;
8355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(func->func.defaults_tuple);
8375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth->func.defaults_tuple = func->func.defaults_tuple;
8385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD)
8405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        obj = type;
8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(obj);
8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    meth->self = obj;
8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (PyObject *) meth;
8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
8495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)_obj_to_str(PyObject *obj)
8505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
8515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyType_Check(obj))
8525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyObject_GetAttr(obj, PYIDENT("__name__"));
8535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else
8545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyObject_Str(obj);
8555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
8565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
8585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx)
8595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
8605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *signature = NULL;
8615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *unbound_result_func;
8625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *result_func = NULL;
8635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (self->__signatures__ == NULL) {
8655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_TypeError, "Function is not fused");
8665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
8675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
8685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyTuple_Check(idx)) {
8705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *list = PyList_New(0);
8715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t n = PyTuple_GET_SIZE(idx);
8725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *string = NULL;
8735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *sep = NULL;
8745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        int i;
8755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!list)
8775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
8785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < n; i++) {
8805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject *item = PyTuple_GET_ITEM(idx, i);
8815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            string = _obj_to_str(item);
8835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (!string || PyList_Append(list, string) < 0)
8845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                goto __pyx_err;
8855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_DECREF(string);
8875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
8885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
8895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        sep = PyUnicode_FromString("|");
8905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (sep)
8915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            signature = PyUnicode_Join(sep, list);
8925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_err:
8935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles);
8945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(list);
8955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_XDECREF(sep);
8965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
8975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        signature = _obj_to_str(idx);
8985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
8995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!signature)
9015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return NULL;
9025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    unbound_result_func = PyObject_GetItem(self->__signatures__, signature);
9045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unbound_result_func) {
9065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (self->self || self->type) {
9075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func;
9085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            /* Todo: move this to InitClassCell */
9105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_CLEAR(unbound->func.func_classobj);
9115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_XINCREF(self->func.func_classobj);
9125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            unbound->func.func_classobj = self->func.func_classobj;
9135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result_func = __pyx_FusedFunction_descr_get(unbound_result_func,
9155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                                        self->self, self->type);
9165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        } else {
9175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            result_func = unbound_result_func;
9185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_INCREF(result_func);
9195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
9205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
9215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(signature);
9235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(unbound_result_func);
9245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result_func;
9265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
9275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
9295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw)
9305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
9315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
9325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *result;
9335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD &&
9345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              !((__pyx_FusedFunctionObject *) func)->__signatures__);
9355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) {
9375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t argc;
9385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *new_args;
9395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *self;
9405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *m_self;
9415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        argc = PyTuple_GET_SIZE(args);
9435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new_args = PyTuple_GetSlice(args, 1, argc);
9445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!new_args)
9465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
9475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self = PyTuple_GetItem(args, 0);
9495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!self)
9515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
9525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        m_self = cyfunc->func.m_self;
9545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        cyfunc->func.m_self = self;
9555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        result = __Pyx_CyFunction_Call(func, new_args, kw);
9565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        cyfunc->func.m_self = m_self;
9575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(new_args);
9595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
9605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        result = __Pyx_CyFunction_Call(func, args, kw);
9615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
9625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
9645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
9655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* Note: the 'self' from method binding is passed in in the args tuple,
9675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         whereas PyCFunctionObject's m_self is passed in as the first
9685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         argument to the C function. For extension methods we need
9695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         to pass 'self' as 'm_self' and not as the first element of the
9705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)         args tuple.
9715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)*/
9725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *
9735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw)
9745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
9755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionObject *binding_func = (__pyx_FusedFunctionObject *) func;
9765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t argc = PyTuple_GET_SIZE(args);
9775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *new_args = NULL;
9785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionObject *new_func = NULL;
9795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *result = NULL;
9805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *self = NULL;
9815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD;
9825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD;
9835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (binding_func->self) {
9855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* Bound method call, put 'self' in the args tuple */
9865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_ssize_t i;
9875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new_args = PyTuple_New(argc + 1);
9885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!new_args)
9895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
9905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self = binding_func->self;
9925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_INCREF(self);
9935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyTuple_SET_ITEM(new_args, 0, self);
9945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
9955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        for (i = 0; i < argc; i++) {
9965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject *item = PyTuple_GET_ITEM(args, i);
9975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_INCREF(item);
9985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyTuple_SET_ITEM(new_args, i + 1, item);
9995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
10005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        args = new_args;
10025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (binding_func->type) {
10035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        /* Unbound method call */
10045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (argc < 1) {
10055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given.");
10065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            return NULL;
10075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
10085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        self = PyTuple_GET_ITEM(args, 0);
10095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
10105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (self && !is_classmethod && !is_staticmethod &&
10125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            !PyObject_IsInstance(self, binding_func->type)) {
10135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
10145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     "First argument should be of type %.200s, got %.200s.",
10155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     ((PyTypeObject *) binding_func->type)->tp_name,
10165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     self->ob_type->tp_name);
10175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto __pyx_err;
10185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
10195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (binding_func->__signatures__) {
10215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *tup = PyTuple_Pack(4, binding_func->__signatures__, args,
10225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        kw == NULL ? Py_None : kw,
10235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        binding_func->func.defaults_tuple);
10245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!tup)
10255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto __pyx_err;
10265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new_func = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_callfunction(func, tup, NULL);
10285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(tup);
10295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!new_func)
10315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto __pyx_err;
10325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_XINCREF(binding_func->func.func_classobj);
10345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_CLEAR(new_func->func.func_classobj);
10355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        new_func->func.func_classobj = binding_func->func.func_classobj;
10365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        func = (PyObject *) new_func;
10385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
10395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    result = __pyx_FusedFunction_callfunction(func, args, kw);
10415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)__pyx_err:
10425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(new_args);
10435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF((PyObject *) new_func);
10445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
10455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
10465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyMemberDef __pyx_FusedFunction_members[] = {
10485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {(char *) "__signatures__",
10495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     T_OBJECT,
10505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     offsetof(__pyx_FusedFunctionObject, __signatures__),
10515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     READONLY,
10525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     __Pyx_DOCSTR(0)},
10535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {0, 0, 0, 0, 0},
10545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
10555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyMappingMethods __pyx_FusedFunction_mapping_methods = {
10575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,
10585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (binaryfunc) __pyx_FusedFunction_getitem,
10595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,
10605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
10615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
10625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject __pyx_FusedFunctionType_type = {
10635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyVarObject_HEAD_INIT(0, 0)
10645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __Pyx_NAMESTR("fused_cython_function"), /*tp_name*/
10655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    sizeof(__pyx_FusedFunctionObject), /*tp_basicsize*/
10665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_itemsize*/
10675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (destructor) __pyx_FusedFunction_dealloc, /*tp_dealloc*/
10685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_print*/
10695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_getattr*/
10705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_setattr*/
10715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
10725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_compare*/
10735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
10745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*reserved*/
10755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
10765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_repr*/
10775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_number*/
10785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_sequence*/
10795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    &__pyx_FusedFunction_mapping_methods, /*tp_as_mapping*/
10805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_hash*/
10815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (ternaryfunc) __pyx_FusedFunction_call, /*tp_call*/
10825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_str*/
10835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_getattro*/
10845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_setattro*/
10855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_as_buffer*/
10865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, /* tp_flags*/
10875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_doc*/
10885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (traverseproc) __pyx_FusedFunction_traverse,   /*tp_traverse*/
10895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (inquiry) __pyx_FusedFunction_clear,/*tp_clear*/
10905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_richcompare*/
10915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_weaklistoffset*/
10925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_iter*/
10935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_iternext*/
10945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_methods*/
10955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunction_members,        /*tp_members*/
10965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* __doc__ is None for the fused function type, but we need it to be */
10975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* a descriptor for the instance's __doc__, so rebuild descriptors in our subclass */
10985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_CyFunction_getsets,           /*tp_getset*/
10995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    &__pyx_CyFunctionType_type,         /*tp_base*/
11005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_dict*/
11015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunction_descr_get,      /*tp_descr_get*/
11025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_descr_set*/
11035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_dictoffset*/
11045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_init*/
11055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_alloc*/
11065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_new*/
11075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_free*/
11085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_is_gc*/
11095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_bases*/
11105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_mro*/
11115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_cache*/
11125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_subclasses*/
11135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_weaklist*/
11145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_del*/
11155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02060000
11165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_version_tag*/
11175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
11185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x030400a1
11195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    0,                                  /*tp_finalize*/
11205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
11215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
11225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __pyx_FusedFunction_init(void) {
11245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type);
11255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (__pyx_FusedFunctionType == NULL) {
11265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
11275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
11295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
11305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ClassMethod.proto ////////////////////
11325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "descrobject.h"
11345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject* __Pyx_Method_ClassMethod(PyObject *method); /*proto*/
11355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//////////////////// ClassMethod ////////////////////
11375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
11395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if CYTHON_COMPILING_IN_PYPY
11405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) { /* cdef classes */
11415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyClassMethod_New(method);
11425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /* It appears that PyMethodDescr_Type is not anywhere exposed in the Python/C API */
11455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    static PyTypeObject *methoddescr_type = NULL;
11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (methoddescr_type == NULL) {
11475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)       PyObject *meth = __Pyx_GetAttrString((PyObject*)&PyList_Type, "append");
11485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)       if (!meth) return NULL;
11495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)       methoddescr_type = Py_TYPE(meth);
11505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)       Py_DECREF(meth);
11515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyObject_TypeCheck(method, methoddescr_type)) { /* cdef classes */
11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
11545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if PY_VERSION_HEX < 0x03020000
11555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyTypeObject *d_type = descr->d_type;
11565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #else
11575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyTypeObject *d_type = descr->d_common.d_type;
11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
11595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyDescr_NewClassMethod(d_type, descr->d_method);
11605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
11625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if (PyMethod_Check(method)) { /* python classes */
11635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
11645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if (PyCFunction_Check(method)) {
11665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyClassMethod_New(method);
11675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef __Pyx_CyFunction_USED
11695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if (PyObject_TypeCheck(method, __pyx_CyFunctionType)) {
11705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return PyClassMethod_New(method);
11715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
11725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
11735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyErr_SetString(PyExc_TypeError,
11745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   "Class-level classmethod() can only be called on "
11755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   "a method_descriptor or instance method.");
11765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
11775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1178