15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// PyIdentifierFromString.proto ///////////////
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if !defined(__Pyx_PyIdentifier_FromString)
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_MAJOR_VERSION < 3
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Import.proto ///////////////
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// Import ///////////////
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectGetAttrStr
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *empty_list = 0;
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *module = 0;
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *global_dict = 0;
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *empty_dict = 0;
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *list;
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_VERSION_HEX < 0x03030000
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_import;
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_import = __Pyx_PyObject_GetAttrStr($builtins_cname, PYIDENT("__import__"));
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!py_import)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (from_list)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        list = from_list;
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else {
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        empty_list = PyList_New(0);
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!empty_list)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        list = empty_list;
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    global_dict = PyModule_GetDict($module_cname);
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!global_dict)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    empty_dict = PyDict_New();
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!empty_dict)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_VERSION_HEX >= 0x02050000
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if PY_MAJOR_VERSION >= 3
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (level == -1) {
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (strchr(__Pyx_MODULE_NAME, '.')) {
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                /* try package relative import first */
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                #if PY_VERSION_HEX < 0x03030000
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                PyObject *py_level = PyInt_FromLong(1);
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                if (!py_level)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    goto bad;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                module = PyObject_CallFunctionObjArgs(py_import,
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    name, global_dict, empty_dict, list, py_level, NULL);
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                Py_DECREF(py_level);
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                #else
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                module = PyImport_ImportModuleLevelObject(
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    name, global_dict, empty_dict, list, 1);
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                #endif
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                if (!module) {
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        goto bad;
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    PyErr_Clear();
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                }
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            }
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            level = 0; /* try absolute import on failure */
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!module) {
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            #if PY_VERSION_HEX < 0x03030000
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            PyObject *py_level = PyInt_FromLong(level);
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            if (!py_level)
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                goto bad;
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            module = PyObject_CallFunctionObjArgs(py_import,
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                name, global_dict, empty_dict, list, py_level, NULL);
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            Py_DECREF(py_level);
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            #else
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            module = PyImport_ImportModuleLevelObject(
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                name, global_dict, empty_dict, list, level);
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            #endif
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        }
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #else
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (level>0) {
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    module = PyObject_CallFunctionObjArgs(py_import,
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        name, global_dict, empty_dict, list, NULL);
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #if PY_VERSION_HEX < 0x03030000
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(py_import);
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #endif
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(empty_list);
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(empty_dict);
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return module;
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ImportFrom.proto ///////////////
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ImportFrom ///////////////
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectGetAttrStr
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_ImportError,
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if PY_MAJOR_VERSION < 3
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "cannot import name %.230s", PyString_AS_STRING(name));
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #else
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "cannot import name %S", name);
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return value;
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ModuleImport.proto ///////////////
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// ModuleImport ///////////////
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyIdentifierFromString
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef __PYX_HAVE_RT_ImportModule
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __PYX_HAVE_RT_ImportModule
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyObject *__Pyx_ImportModule(const char *name) {
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_name = 0;
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_module = 0;
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_name = __Pyx_PyIdentifier_FromString(name);
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!py_name)
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_module = PyImport_Import(py_name);
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(py_name);
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return py_module;
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(py_name);
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetPackagePathFromImportLib.proto ///////////////
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x03030000
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name);
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __Pyx_SetPackagePathFromImportLib(a, b) 0
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetPackagePathFromImportLib ///////////////
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectGetAttrStr
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x03030000
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name) {
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *importlib, *loader, *osmod, *ossep, *parts, *package_path;
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *path = NULL, *file_path = NULL;
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int result;
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (parent_package_name) {
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyObject *package = PyImport_ImportModule(parent_package_name);
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(!package))
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        path = PyObject_GetAttrString(package, "__path__");
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_DECREF(package);
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (unlikely(!path) || unlikely(path == Py_None))
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else {
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        path = Py_None; Py_INCREF(Py_None);
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // package_path = [importlib.find_loader(module_name, path).path.rsplit(os.sep, 1)[0]]
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    importlib = PyImport_ImportModule("importlib");
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!importlib))
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    loader = PyObject_CallMethod(importlib, "find_loader", "(OO)", module_name, path);
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(importlib);
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(path); path = NULL;
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!loader))
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    file_path = PyObject_GetAttrString(loader, "path");
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(loader);
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!file_path))
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(__Pyx_SetAttrString($module_cname, "__file__", file_path) < 0))
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    osmod = PyImport_ImportModule("os");
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!osmod))
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ossep = PyObject_GetAttrString(osmod, "sep");
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(osmod);
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!ossep))
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    parts = PyObject_CallMethod(file_path, "rsplit", "(Oi)", ossep, 1);
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(file_path); file_path = NULL;
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(ossep);
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!parts))
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    package_path = Py_BuildValue("[O]", PyList_GET_ITEM(parts, 0));
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(parts);
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!package_path))
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    goto set_path;
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyErr_WriteUnraisable(module_name);
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(path);
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(file_path);
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // set an empty path list on failure
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyErr_Clear();
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    package_path = PyList_New(0);
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (unlikely(!package_path))
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        return -1;
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)set_path:
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    result = __Pyx_SetAttrString($module_cname, "__path__", package_path);
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(package_path);
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return result;
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// TypeImport.proto ///////////////
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// TypeImport ///////////////
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: PyIdentifierFromString
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ModuleImport
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef __PYX_HAVE_RT_ImportType
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __PYX_HAVE_RT_ImportType
2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    size_t size, int strict)
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_module = 0;
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *result = 0;
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_name = 0;
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    char warning[200];
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t basicsize;
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef Py_LIMITED_API
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *py_basicsize;
2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_module = __Pyx_ImportModule(module_name);
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!py_module)
2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_name = __Pyx_PyIdentifier_FromString(class_name);
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!py_name)
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    result = PyObject_GetAttr(py_module, py_name);
2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(py_name);
2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_name = 0;
2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(py_module);
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_module = 0;
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!result)
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!PyType_Check(result)) {
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "%.200s.%.200s is not a type object",
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            module_name, class_name);
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef Py_LIMITED_API
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    basicsize = ((PyTypeObject *)result)->tp_basicsize;
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!py_basicsize)
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    basicsize = PyLong_AsSsize_t(py_basicsize);
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(py_basicsize);
2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    py_basicsize = 0;
2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!strict && (size_t)basicsize > size) {
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyOS_snprintf(warning, sizeof(warning),
2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "%s.%s size changed, may indicate binary incompatibility",
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            module_name, class_name);
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #if PY_VERSION_HEX < 0x02050000
2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (PyErr_Warn(NULL, warning) < 0) goto bad;
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #else
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        #endif
2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    else if ((size_t)basicsize != size) {
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_ValueError,
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "%.200s.%.200s has the wrong size, try recompiling",
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            module_name, class_name);
3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return (PyTypeObject *)result;
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(py_module);
3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(result);
3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FunctionImport.proto ///////////////
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /*proto*/
3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FunctionImport ///////////////
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef __PYX_HAVE_RT_ImportFunction
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __PYX_HAVE_RT_ImportFunction
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *d = 0;
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *cobj = 0;
3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    union {
3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        void (*fp)(void);
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        void *p;
3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } tmp;
3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    d = PyObject_GetAttrString(module, (char *)"$api_name");
3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!d)
3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyDict_GetItemString(d, funcname);
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!cobj) {
3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_ImportError,
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "%.200s does not export expected C function %.200s",
3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                PyModule_GetName(module), funcname);
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0)
3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!PyCapsule_IsValid(cobj, sig)) {
3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp.p = PyCapsule_GetPointer(cobj, sig);
3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {const char *desc, *s1, *s2;
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    desc = (const char *)PyCObject_GetDesc(cobj);
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!desc)
3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    s1 = desc; s2 = sig;
3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (*s1 != *s2) {
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             PyModule_GetName(module), funcname, sig, desc);
3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp.p = PyCObject_AsVoidPtr(cobj);}
3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    *f = tmp.fp;
3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!(*f))
3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(d);
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(d);
3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return -1;
3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FunctionExport.proto ///////////////
3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FunctionExport ///////////////
3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *d = 0;
3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *cobj = 0;
3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    union {
3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        void (*fp)(void);
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        void *p;
3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } tmp;
3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    d = PyObject_GetAttrString($module_cname, (char *)"$api_name");
3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!d) {
3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Clear();
3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        d = PyDict_New();
3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!d)
3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Py_INCREF(d);
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (PyModule_AddObject($module_cname, (char *)"$api_name", d) < 0)
3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tmp.fp = f;
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyCapsule_New(tmp.p, sig, 0);
3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!cobj)
4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyDict_SetItemString(d, name, cobj) < 0)
4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(cobj);
4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(d);
4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(cobj);
4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(d);
4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return -1;
4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// VoidPtrImport.proto ///////////////
4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig); /*proto*/
4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// VoidPtrImport ///////////////
4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef __PYX_HAVE_RT_ImportVoidPtr
4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define __PYX_HAVE_RT_ImportVoidPtr
4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) {
4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *d = 0;
4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *cobj = 0;
4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    d = PyObject_GetAttrString(module, (char *)"$api_name");
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!d)
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyDict_GetItemString(d, name);
4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!cobj) {
4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_ImportError,
4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "%.200s does not export expected C variable %.200s",
4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                PyModule_GetName(module), name);
4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0)
4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!PyCapsule_IsValid(cobj, sig)) {
4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    *p = PyCapsule_GetPointer(cobj, sig);
4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    {const char *desc, *s1, *s2;
4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    desc = (const char *)PyCObject_GetDesc(cobj);
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!desc)
4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    s1 = desc; s2 = sig;
4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (*s1 != *s2) {
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_Format(PyExc_TypeError,
4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             PyModule_GetName(module), name, sig, desc);
4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    *p = PyCObject_AsVoidPtr(cobj);}
4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!(*p))
4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(d);
4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(d);
4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return -1;
4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// VoidPtrExport.proto ///////////////
4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig); /*proto*/
4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// VoidPtrExport ///////////////
4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@substitute: naming
4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//@requires: ObjectHandling.c::PyObjectSetAttrStr
4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig) {
4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *d;
4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *cobj = 0;
4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    d = PyDict_GetItem($moddict_cname, PYIDENT("$api_name"));
4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XINCREF(d);
4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!d) {
4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        d = PyDict_New();
4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (!d)
4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        if (__Pyx_PyObject_SetAttrStr($module_cname, PYIDENT("$api_name"), d) < 0)
4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            goto bad;
4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0)
4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyCapsule_New(p, sig, 0);
4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    cobj = PyCObject_FromVoidPtrAndDesc(p, (void *)sig, 0);
4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!cobj)
4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyDict_SetItem(d, name, cobj) < 0)
5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(cobj);
5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(d);
5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(cobj);
5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(d);
5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return -1;
5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetVTable.proto ///////////////
5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// SetVTable ///////////////
5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *ob = PyCapsule_New(vtable, 0, 0);
5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!ob)
5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (PyDict_SetItem(dict, PYIDENT("__pyx_vtable__"), ob) < 0)
5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(ob);
5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return 0;
5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(ob);
5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return -1;
5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetVTable.proto ///////////////
5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void* __Pyx_GetVtable(PyObject *dict); /*proto*/
5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// GetVTable ///////////////
5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void* __Pyx_GetVtable(PyObject *dict) {
5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void* ptr;
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__"));
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!ob)
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        goto bad;
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ptr = PyCapsule_GetPointer(ob, 0);
5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ptr = PyCObject_AsVoidPtr(ob);
5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!ptr && !PyErr_Occurred())
5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_DECREF(ob);
5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return ptr;
5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad:
5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_XDECREF(ob);
5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
559