| | |
| |
|
| | #if !defined(__Pyx_PyIdentifier_FromString) |
| | #if PY_MAJOR_VERSION < 3 |
| | #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) |
| | #else |
| | #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) |
| | #endif |
| | #endif |
| |
|
| | |
| |
|
| | static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); |
| |
|
| | |
| | |
| | |
| |
|
| | static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { |
| | PyObject *empty_list = 0; |
| | PyObject *module = 0; |
| | PyObject *global_dict = 0; |
| | PyObject *empty_dict = 0; |
| | PyObject *list; |
| | #if PY_MAJOR_VERSION < 3 |
| | PyObject *py_import; |
| | py_import = __Pyx_PyObject_GetAttrStr($builtins_cname, PYIDENT("__import__")); |
| | if (!py_import) |
| | goto bad; |
| | #endif |
| | if (from_list) |
| | list = from_list; |
| | else { |
| | empty_list = PyList_New(0); |
| | if (!empty_list) |
| | goto bad; |
| | list = empty_list; |
| | } |
| | global_dict = PyModule_GetDict($module_cname); |
| | if (!global_dict) |
| | goto bad; |
| | empty_dict = PyDict_New(); |
| | if (!empty_dict) |
| | goto bad; |
| | { |
| | #if PY_MAJOR_VERSION >= 3 |
| | if (level == -1) { |
| | |
| | if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { |
| | |
| | module = PyImport_ImportModuleLevelObject( |
| | name, global_dict, empty_dict, list, 1); |
| | if (!module) { |
| | if (!PyErr_ExceptionMatches(PyExc_ImportError)) |
| | goto bad; |
| | PyErr_Clear(); |
| | } |
| | } |
| | level = 0; |
| | } |
| | #endif |
| | if (!module) { |
| | #if PY_MAJOR_VERSION < 3 |
| | PyObject *py_level = PyInt_FromLong(level); |
| | if (!py_level) |
| | goto bad; |
| | module = PyObject_CallFunctionObjArgs(py_import, |
| | name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); |
| | Py_DECREF(py_level); |
| | #else |
| | module = PyImport_ImportModuleLevelObject( |
| | name, global_dict, empty_dict, list, level); |
| | #endif |
| | } |
| | } |
| | bad: |
| | #if PY_MAJOR_VERSION < 3 |
| | Py_XDECREF(py_import); |
| | #endif |
| | Py_XDECREF(empty_list); |
| | Py_XDECREF(empty_dict); |
| | return module; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); |
| |
|
| | |
| | |
| |
|
| | static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { |
| | PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); |
| | if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { |
| | PyErr_Format(PyExc_ImportError, |
| | #if PY_MAJOR_VERSION < 3 |
| | "cannot import name %.230s", PyString_AS_STRING(name)); |
| | #else |
| | "cannot import name %S", name); |
| | #endif |
| | } |
| | return value; |
| | } |
| |
|
| |
|
| | |
| | |
| |
|
| | |
| |
|
| | static int |
| | __Pyx_import_all_from(PyObject *locals, PyObject *v) |
| | { |
| | PyObject *all = PyObject_GetAttrString(v, "__all__"); |
| | PyObject *dict, *name, *value; |
| | int skip_leading_underscores = 0; |
| | int pos, err; |
| |
|
| | if (all == NULL) { |
| | if (!PyErr_ExceptionMatches(PyExc_AttributeError)) |
| | return -1; |
| | PyErr_Clear(); |
| | dict = PyObject_GetAttrString(v, "__dict__"); |
| | if (dict == NULL) { |
| | if (!PyErr_ExceptionMatches(PyExc_AttributeError)) |
| | return -1; |
| | PyErr_SetString(PyExc_ImportError, |
| | "from-import-* object has no __dict__ and no __all__"); |
| | return -1; |
| | } |
| | #if PY_MAJOR_VERSION < 3 |
| | all = PyObject_CallMethod(dict, (char *)"keys", NULL); |
| | #else |
| | all = PyMapping_Keys(dict); |
| | #endif |
| | Py_DECREF(dict); |
| | if (all == NULL) |
| | return -1; |
| | skip_leading_underscores = 1; |
| | } |
| |
|
| | for (pos = 0, err = 0; ; pos++) { |
| | name = PySequence_GetItem(all, pos); |
| | if (name == NULL) { |
| | if (!PyErr_ExceptionMatches(PyExc_IndexError)) |
| | err = -1; |
| | else |
| | PyErr_Clear(); |
| | break; |
| | } |
| | if (skip_leading_underscores && |
| | #if PY_MAJOR_VERSION < 3 |
| | likely(PyString_Check(name)) && |
| | PyString_AS_STRING(name)[0] == '_') |
| | #else |
| | likely(PyUnicode_Check(name)) && |
| | likely(__Pyx_PyUnicode_GET_LENGTH(name)) && |
| | __Pyx_PyUnicode_READ_CHAR(name, 0) == '_') |
| | #endif |
| | { |
| | Py_DECREF(name); |
| | continue; |
| | } |
| | value = PyObject_GetAttr(v, name); |
| | if (value == NULL) |
| | err = -1; |
| | else if (PyDict_CheckExact(locals)) |
| | err = PyDict_SetItem(locals, name, value); |
| | else |
| | err = PyObject_SetItem(locals, name, value); |
| | Py_DECREF(name); |
| | Py_XDECREF(value); |
| | if (err != 0) |
| | break; |
| | } |
| | Py_DECREF(all); |
| | return err; |
| | } |
| |
|
| |
|
| | static int ${import_star}(PyObject* m) { |
| |
|
| | int i; |
| | int ret = -1; |
| | char* s; |
| | PyObject *locals = 0; |
| | PyObject *list = 0; |
| | #if PY_MAJOR_VERSION >= 3 |
| | PyObject *utf8_name = 0; |
| | #endif |
| | PyObject *name; |
| | PyObject *item; |
| |
|
| | locals = PyDict_New(); if (!locals) goto bad; |
| | if (__Pyx_import_all_from(locals, m) < 0) goto bad; |
| | list = PyDict_Items(locals); if (!list) goto bad; |
| |
|
| | for(i=0; i<PyList_GET_SIZE(list); i++) { |
| | name = PyTuple_GET_ITEM(PyList_GET_ITEM(list, i), 0); |
| | item = PyTuple_GET_ITEM(PyList_GET_ITEM(list, i), 1); |
| | #if PY_MAJOR_VERSION >= 3 |
| | utf8_name = PyUnicode_AsUTF8String(name); |
| | if (!utf8_name) goto bad; |
| | s = PyBytes_AS_STRING(utf8_name); |
| | if (${import_star_set}(item, name, s) < 0) goto bad; |
| | Py_DECREF(utf8_name); utf8_name = 0; |
| | #else |
| | s = PyString_AsString(name); |
| | if (!s) goto bad; |
| | if (${import_star_set}(item, name, s) < 0) goto bad; |
| | #endif |
| | } |
| | ret = 0; |
| |
|
| | bad: |
| | Py_XDECREF(locals); |
| | Py_XDECREF(list); |
| | #if PY_MAJOR_VERSION >= 3 |
| | Py_XDECREF(utf8_name); |
| | #endif |
| | return ret; |
| | } |
| |
|
| |
|
| | |
| |
|
| | |
| | #if PY_MAJOR_VERSION >= 3 && !CYTHON_PEP489_MULTI_PHASE_INIT |
| | static int __Pyx_SetPackagePathFromImportLib(PyObject *module_name); |
| | #else |
| | #define __Pyx_SetPackagePathFromImportLib(a) 0 |
| | #endif |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | #if PY_MAJOR_VERSION >= 3 && !CYTHON_PEP489_MULTI_PHASE_INIT |
| | static int __Pyx_SetPackagePathFromImportLib(PyObject *module_name) { |
| | PyObject *importlib, *osmod, *ossep, *parts, *package_path; |
| | PyObject *file_path = NULL; |
| | int result; |
| | PyObject *spec; |
| | |
| | importlib = PyImport_ImportModule("importlib.util"); |
| | if (unlikely(!importlib)) |
| | goto bad; |
| | spec = PyObject_CallMethod(importlib, "find_spec", "(O)", module_name); |
| | Py_DECREF(importlib); |
| | if (unlikely(!spec)) |
| | goto bad; |
| | file_path = PyObject_GetAttrString(spec, "origin"); |
| | Py_DECREF(spec); |
| | if (unlikely(!file_path)) |
| | goto bad; |
| |
|
| | if (unlikely(PyObject_SetAttrString($module_cname, "__file__", file_path) < 0)) |
| | goto bad; |
| |
|
| | osmod = PyImport_ImportModule("os"); |
| | if (unlikely(!osmod)) |
| | goto bad; |
| | ossep = PyObject_GetAttrString(osmod, "sep"); |
| | Py_DECREF(osmod); |
| | if (unlikely(!ossep)) |
| | goto bad; |
| | parts = PyObject_CallMethod(file_path, "rsplit", "(Oi)", ossep, 1); |
| | Py_DECREF(file_path); file_path = NULL; |
| | Py_DECREF(ossep); |
| | if (unlikely(!parts)) |
| | goto bad; |
| | package_path = Py_BuildValue("[O]", PyList_GET_ITEM(parts, 0)); |
| | Py_DECREF(parts); |
| | if (unlikely(!package_path)) |
| | goto bad; |
| | goto set_path; |
| |
|
| | bad: |
| | PyErr_WriteUnraisable(module_name); |
| | Py_XDECREF(file_path); |
| |
|
| | |
| | PyErr_Clear(); |
| | package_path = PyList_New(0); |
| | if (unlikely(!package_path)) |
| | return -1; |
| |
|
| | set_path: |
| | result = PyObject_SetAttrString($module_cname, "__path__", package_path); |
| | Py_DECREF(package_path); |
| | return result; |
| | } |
| | #endif |
| |
|
| |
|
| | |
| | |
| |
|
| | #ifndef __PYX_HAVE_RT_ImportType_proto_$cyversion |
| | #define __PYX_HAVE_RT_ImportType_proto_$cyversion |
| |
|
| | #if __STDC_VERSION__ >= 201112L |
| | #include <stdalign.h> |
| | #endif |
| |
|
| | #if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L |
| | #define __PYX_GET_STRUCT_ALIGNMENT_$cyversion(s) alignof(s) |
| | #else |
| | |
| | #define __PYX_GET_STRUCT_ALIGNMENT_$cyversion(s) sizeof(void*) |
| | #endif |
| |
|
| | enum __Pyx_ImportType_CheckSize_$cyversion { |
| | __Pyx_ImportType_CheckSize_Error_$cyversion = 0, |
| | __Pyx_ImportType_CheckSize_Warn_$cyversion = 1, |
| | __Pyx_ImportType_CheckSize_Ignore_$cyversion = 2 |
| | }; |
| |
|
| | static PyTypeObject *__Pyx_ImportType_$cyversion(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_$cyversion check_size); |
| |
|
| | #endif |
| |
|
| | |
| | |
| |
|
| | #ifndef __PYX_HAVE_RT_ImportType_$cyversion |
| | #define __PYX_HAVE_RT_ImportType_$cyversion |
| | static PyTypeObject *__Pyx_ImportType_$cyversion(PyObject *module, const char *module_name, const char *class_name, |
| | size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_$cyversion check_size) |
| | { |
| | PyObject *result = 0; |
| | char warning[200]; |
| | Py_ssize_t basicsize; |
| | Py_ssize_t itemsize; |
| | #ifdef Py_LIMITED_API |
| | PyObject *py_basicsize; |
| | PyObject *py_itemsize; |
| | #endif |
| |
|
| | result = PyObject_GetAttrString(module, class_name); |
| | if (!result) |
| | goto bad; |
| | if (!PyType_Check(result)) { |
| | PyErr_Format(PyExc_TypeError, |
| | "%.200s.%.200s is not a type object", |
| | module_name, class_name); |
| | goto bad; |
| | } |
| | #ifndef Py_LIMITED_API |
| | basicsize = ((PyTypeObject *)result)->tp_basicsize; |
| | itemsize = ((PyTypeObject *)result)->tp_itemsize; |
| | #else |
| | py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); |
| | if (!py_basicsize) |
| | goto bad; |
| | basicsize = PyLong_AsSsize_t(py_basicsize); |
| | Py_DECREF(py_basicsize); |
| | py_basicsize = 0; |
| | if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) |
| | goto bad; |
| | py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); |
| | if (!py_itemsize) |
| | goto bad; |
| | itemsize = PyLong_AsSsize_t(py_itemsize); |
| | Py_DECREF(py_itemsize); |
| | py_itemsize = 0; |
| | if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) |
| | goto bad; |
| | #endif |
| | if (itemsize) { |
| | |
| | |
| | |
| | if (size % alignment) { |
| | |
| | |
| | alignment = size % alignment; |
| | } |
| | if (itemsize < (Py_ssize_t)alignment) |
| | itemsize = (Py_ssize_t)alignment; |
| | } |
| | if ((size_t)(basicsize + itemsize) < size) { |
| | PyErr_Format(PyExc_ValueError, |
| | "%.200s.%.200s size changed, may indicate binary incompatibility. " |
| | "Expected %zd from C header, got %zd from PyObject", |
| | module_name, class_name, size, basicsize); |
| | goto bad; |
| | } |
| | if (check_size == __Pyx_ImportType_CheckSize_Error_$cyversion && (size_t)basicsize != size) { |
| | PyErr_Format(PyExc_ValueError, |
| | "%.200s.%.200s size changed, may indicate binary incompatibility. " |
| | "Expected %zd from C header, got %zd from PyObject", |
| | module_name, class_name, size, basicsize); |
| | goto bad; |
| | } |
| | else if (check_size == __Pyx_ImportType_CheckSize_Warn_$cyversion && (size_t)basicsize > size) { |
| | PyOS_snprintf(warning, sizeof(warning), |
| | "%s.%s size changed, may indicate binary incompatibility. " |
| | "Expected %zd from C header, got %zd from PyObject", |
| | module_name, class_name, size, basicsize); |
| | if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; |
| | } |
| | |
| | return (PyTypeObject *)result; |
| | bad: |
| | Py_XDECREF(result); |
| | return NULL; |
| | } |
| | #endif |
| |
|
| | |
| | |
| |
|
| | static int __Pyx_ImportFunction_$cyversion(PyObject *module, const char *funcname, void (**f)(void), const char *sig); |
| |
|
| | |
| | |
| |
|
| | #ifndef __PYX_HAVE_RT_ImportFunction_$cyversion |
| | #define __PYX_HAVE_RT_ImportFunction_$cyversion |
| | static int __Pyx_ImportFunction_$cyversion(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { |
| | PyObject *d = 0; |
| | PyObject *cobj = 0; |
| | union { |
| | void (*fp)(void); |
| | void *p; |
| | } tmp; |
| |
|
| | d = PyObject_GetAttrString(module, (char *)"$api_name"); |
| | if (!d) |
| | goto bad; |
| | cobj = PyDict_GetItemString(d, funcname); |
| | if (!cobj) { |
| | PyErr_Format(PyExc_ImportError, |
| | "%.200s does not export expected C function %.200s", |
| | PyModule_GetName(module), funcname); |
| | goto bad; |
| | } |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | if (!PyCapsule_IsValid(cobj, sig)) { |
| | PyErr_Format(PyExc_TypeError, |
| | "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
| | PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj)); |
| | goto bad; |
| | } |
| | tmp.p = PyCapsule_GetPointer(cobj, sig); |
| | #else |
| | {const char *desc, *s1, *s2; |
| | desc = (const char *)PyCObject_GetDesc(cobj); |
| | if (!desc) |
| | goto bad; |
| | s1 = desc; s2 = sig; |
| | while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } |
| | if (*s1 != *s2) { |
| | PyErr_Format(PyExc_TypeError, |
| | "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
| | PyModule_GetName(module), funcname, sig, desc); |
| | goto bad; |
| | } |
| | tmp.p = PyCObject_AsVoidPtr(cobj);} |
| | #endif |
| | *f = tmp.fp; |
| | if (!(*f)) |
| | goto bad; |
| | Py_DECREF(d); |
| | return 0; |
| | bad: |
| | Py_XDECREF(d); |
| | return -1; |
| | } |
| | #endif |
| |
|
| | |
| |
|
| | static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); |
| |
|
| | |
| | |
| |
|
| | static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) { |
| | PyObject *d = 0; |
| | PyObject *cobj = 0; |
| | union { |
| | void (*fp)(void); |
| | void *p; |
| | } tmp; |
| |
|
| | d = PyObject_GetAttrString($module_cname, (char *)"$api_name"); |
| | if (!d) { |
| | PyErr_Clear(); |
| | d = PyDict_New(); |
| | if (!d) |
| | goto bad; |
| | Py_INCREF(d); |
| | if (PyModule_AddObject($module_cname, (char *)"$api_name", d) < 0) |
| | goto bad; |
| | } |
| | tmp.fp = f; |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | cobj = PyCapsule_New(tmp.p, sig, 0); |
| | #else |
| | cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0); |
| | #endif |
| | if (!cobj) |
| | goto bad; |
| | if (PyDict_SetItemString(d, name, cobj) < 0) |
| | goto bad; |
| | Py_DECREF(cobj); |
| | Py_DECREF(d); |
| | return 0; |
| | bad: |
| | Py_XDECREF(cobj); |
| | Py_XDECREF(d); |
| | return -1; |
| | } |
| |
|
| | |
| | |
| |
|
| | static int __Pyx_ImportVoidPtr_$cyversion(PyObject *module, const char *name, void **p, const char *sig); |
| |
|
| | |
| | |
| |
|
| | #ifndef __PYX_HAVE_RT_ImportVoidPtr_$cyversion |
| | #define __PYX_HAVE_RT_ImportVoidPtr_$cyversion |
| | static int __Pyx_ImportVoidPtr_$cyversion(PyObject *module, const char *name, void **p, const char *sig) { |
| | PyObject *d = 0; |
| | PyObject *cobj = 0; |
| |
|
| | d = PyObject_GetAttrString(module, (char *)"$api_name"); |
| | if (!d) |
| | goto bad; |
| | cobj = PyDict_GetItemString(d, name); |
| | if (!cobj) { |
| | PyErr_Format(PyExc_ImportError, |
| | "%.200s does not export expected C variable %.200s", |
| | PyModule_GetName(module), name); |
| | goto bad; |
| | } |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | if (!PyCapsule_IsValid(cobj, sig)) { |
| | PyErr_Format(PyExc_TypeError, |
| | "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
| | PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj)); |
| | goto bad; |
| | } |
| | *p = PyCapsule_GetPointer(cobj, sig); |
| | #else |
| | {const char *desc, *s1, *s2; |
| | desc = (const char *)PyCObject_GetDesc(cobj); |
| | if (!desc) |
| | goto bad; |
| | s1 = desc; s2 = sig; |
| | while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } |
| | if (*s1 != *s2) { |
| | PyErr_Format(PyExc_TypeError, |
| | "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
| | PyModule_GetName(module), name, sig, desc); |
| | goto bad; |
| | } |
| | *p = PyCObject_AsVoidPtr(cobj);} |
| | #endif |
| | if (!(*p)) |
| | goto bad; |
| | Py_DECREF(d); |
| | return 0; |
| | bad: |
| | Py_XDECREF(d); |
| | return -1; |
| | } |
| | #endif |
| |
|
| | |
| |
|
| | static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig); |
| |
|
| | |
| | |
| | |
| |
|
| | static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig) { |
| | PyObject *d; |
| | PyObject *cobj = 0; |
| |
|
| | d = PyDict_GetItem($moddict_cname, PYIDENT("$api_name")); |
| | Py_XINCREF(d); |
| | if (!d) { |
| | d = PyDict_New(); |
| | if (!d) |
| | goto bad; |
| | if (__Pyx_PyObject_SetAttrStr($module_cname, PYIDENT("$api_name"), d) < 0) |
| | goto bad; |
| | } |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | cobj = PyCapsule_New(p, sig, 0); |
| | #else |
| | cobj = PyCObject_FromVoidPtrAndDesc(p, (void *)sig, 0); |
| | #endif |
| | if (!cobj) |
| | goto bad; |
| | if (PyDict_SetItem(d, name, cobj) < 0) |
| | goto bad; |
| | Py_DECREF(cobj); |
| | Py_DECREF(d); |
| | return 0; |
| | bad: |
| | Py_XDECREF(cobj); |
| | Py_XDECREF(d); |
| | return -1; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static int __Pyx_SetVtable(PyObject *dict, void *vtable); |
| |
|
| | |
| |
|
| | static int __Pyx_SetVtable(PyObject *dict, void *vtable) { |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | PyObject *ob = PyCapsule_New(vtable, 0, 0); |
| | #else |
| | PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); |
| | #endif |
| | if (!ob) |
| | goto bad; |
| | if (PyDict_SetItem(dict, PYIDENT("__pyx_vtable__"), ob) < 0) |
| | goto bad; |
| | Py_DECREF(ob); |
| | return 0; |
| | bad: |
| | Py_XDECREF(ob); |
| | return -1; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static void* __Pyx_GetVtable(PyObject *dict); |
| |
|
| | |
| |
|
| | static void* __Pyx_GetVtable(PyObject *dict) { |
| | void* ptr; |
| | PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__")); |
| | if (!ob) |
| | goto bad; |
| | #if PY_VERSION_HEX >= 0x02070000 |
| | ptr = PyCapsule_GetPointer(ob, 0); |
| | #else |
| | ptr = PyCObject_AsVoidPtr(ob); |
| | #endif |
| | if (!ptr && !PyErr_Occurred()) |
| | PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); |
| | Py_DECREF(ob); |
| | return ptr; |
| | bad: |
| | Py_XDECREF(ob); |
| | return NULL; |
| | } |
| |
|
| |
|
| | |
| | |
| |
|
| | static int __Pyx_MergeVtables(PyTypeObject *type); |
| |
|
| | |
| |
|
| | static int __Pyx_MergeVtables(PyTypeObject *type) { |
| | int i; |
| | void** base_vtables; |
| | void* unknown = (void*)-1; |
| | PyObject* bases = type->tp_bases; |
| | int base_depth = 0; |
| | { |
| | PyTypeObject* base = type->tp_base; |
| | while (base) { |
| | base_depth += 1; |
| | base = base->tp_base; |
| | } |
| | } |
| | base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); |
| | base_vtables[0] = unknown; |
| | |
| | |
| | |
| | |
| | |
| | |
| | for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { |
| | void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))->tp_dict); |
| | if (base_vtable != NULL) { |
| | int j; |
| | PyTypeObject* base = type->tp_base; |
| | for (j = 0; j < base_depth; j++) { |
| | if (base_vtables[j] == unknown) { |
| | base_vtables[j] = __Pyx_GetVtable(base->tp_dict); |
| | base_vtables[j + 1] = unknown; |
| | } |
| | if (base_vtables[j] == base_vtable) { |
| | break; |
| | } else if (base_vtables[j] == NULL) { |
| | |
| | goto bad; |
| | } |
| | base = base->tp_base; |
| | } |
| | } |
| | } |
| | PyErr_Clear(); |
| | free(base_vtables); |
| | return 0; |
| | bad: |
| | PyErr_Format( |
| | PyExc_TypeError, |
| | "multiple bases have vtable conflict: '%s' and '%s'", |
| | type->tp_base->tp_name, ((PyTypeObject*)PyTuple_GET_ITEM(bases, i))->tp_name); |
| | free(base_vtables); |
| | return -1; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static PyObject *__pyx_numpy_ndarray = NULL; |
| |
|
| | static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); |
| |
|
| | |
| | Py_CLEAR(__pyx_numpy_ndarray); |
| |
|
| | |
| | |
| |
|
| | static PyObject* __Pyx__ImportNumPyArray(void) { |
| | PyObject *numpy_module, *ndarray_object = NULL; |
| | numpy_module = __Pyx_Import(PYIDENT("numpy"), NULL, 0); |
| | if (likely(numpy_module)) { |
| | ndarray_object = PyObject_GetAttrString(numpy_module, "ndarray"); |
| | Py_DECREF(numpy_module); |
| | } |
| | if (unlikely(!ndarray_object)) { |
| | |
| | PyErr_Clear(); |
| | } |
| | if (unlikely(!ndarray_object || !PyObject_TypeCheck(ndarray_object, &PyType_Type))) { |
| | Py_XDECREF(ndarray_object); |
| | Py_INCREF(Py_None); |
| | ndarray_object = Py_None; |
| | } |
| | return ndarray_object; |
| | } |
| |
|
| | static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { |
| | if (unlikely(!__pyx_numpy_ndarray)) { |
| | __pyx_numpy_ndarray = __Pyx__ImportNumPyArray(); |
| | } |
| | Py_INCREF(__pyx_numpy_ndarray); |
| | return __pyx_numpy_ndarray; |
| | } |
| |
|