Spaces:
Runtime error
Runtime error
| /////////////// PyIdentifierFromString.proto /////////////// | |
| /////////////// Import.proto /////////////// | |
| static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ | |
| /////////////// Import /////////////// | |
| //@requires: ObjectHandling.c::PyObjectGetAttrStr | |
| //@substitute: naming | |
| 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; | |
| PyObject *py_import; | |
| py_import = __Pyx_PyObject_GetAttrStr($builtins_cname, PYIDENT("__import__")); | |
| if (!py_import) | |
| goto bad; | |
| 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 (level == -1) { | |
| // Avoid C compiler warning if strchr() evaluates to false at compile time. | |
| if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { | |
| /* try package relative import first */ | |
| module = PyImport_ImportModuleLevelObject( | |
| name, global_dict, empty_dict, list, 1); | |
| if (!module) { | |
| if (!PyErr_ExceptionMatches(PyExc_ImportError)) | |
| goto bad; | |
| PyErr_Clear(); | |
| } | |
| } | |
| level = 0; /* try absolute import on failure */ | |
| } | |
| if (!module) { | |
| 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); | |
| module = PyImport_ImportModuleLevelObject( | |
| name, global_dict, empty_dict, list, level); | |
| } | |
| } | |
| bad: | |
| Py_XDECREF(py_import); | |
| Py_XDECREF(empty_list); | |
| Py_XDECREF(empty_dict); | |
| return module; | |
| } | |
| /////////////// ImportFrom.proto /////////////// | |
| static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ | |
| /////////////// ImportFrom /////////////// | |
| //@requires: ObjectHandling.c::PyObjectGetAttrStr | |
| 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, | |
| "cannot import name %.230s", PyString_AS_STRING(name)); | |
| "cannot import name %S", name); | |
| } | |
| return value; | |
| } | |
| /////////////// ImportStar /////////////// | |
| //@substitute: naming | |
| /* import_all_from is an unexposed function from ceval.c */ | |
| 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; /* Unexpected error */ | |
| 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; | |
| } | |
| all = PyObject_CallMethod(dict, (char *)"keys", NULL); | |
| all = PyMapping_Keys(dict); | |
| 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 && | |
| likely(PyString_Check(name)) && | |
| PyString_AS_STRING(name)[0] == '_') | |
| likely(PyUnicode_Check(name)) && | |
| likely(__Pyx_PyUnicode_GET_LENGTH(name)) && | |
| __Pyx_PyUnicode_READ_CHAR(name, 0) == '_') | |
| { | |
| 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; | |
| PyObject *utf8_name = 0; | |
| 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); | |
| 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; | |
| s = PyString_AsString(name); | |
| if (!s) goto bad; | |
| if (${import_star_set}(item, name, s) < 0) goto bad; | |
| } | |
| ret = 0; | |
| bad: | |
| Py_XDECREF(locals); | |
| Py_XDECREF(list); | |
| Py_XDECREF(utf8_name); | |
| return ret; | |
| } | |
| /////////////// SetPackagePathFromImportLib.proto /////////////// | |
| // PY_VERSION_HEX >= 0x03030000 | |
| static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name); | |
| /////////////// SetPackagePathFromImportLib /////////////// | |
| //@requires: ObjectHandling.c::PyObjectGetAttrStr | |
| //@substitute: naming | |
| // PY_VERSION_HEX >= 0x03030000 | |
| static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name) { | |
| PyObject *importlib, *loader, *osmod, *ossep, *parts, *package_path; | |
| PyObject *path = NULL, *file_path = NULL; | |
| int result; | |
| if (parent_package_name) { | |
| PyObject *package = PyImport_ImportModule(parent_package_name); | |
| if (unlikely(!package)) | |
| goto bad; | |
| path = PyObject_GetAttrString(package, "__path__"); | |
| Py_DECREF(package); | |
| if (unlikely(!path) || unlikely(path == Py_None)) | |
| goto bad; | |
| } else { | |
| path = Py_None; Py_INCREF(Py_None); | |
| } | |
| // package_path = [importlib.find_loader(module_name, path).path.rsplit(os.sep, 1)[0]] | |
| importlib = PyImport_ImportModule("importlib"); | |
| if (unlikely(!importlib)) | |
| goto bad; | |
| loader = PyObject_CallMethod(importlib, "find_loader", "(OO)", module_name, path); | |
| Py_DECREF(importlib); | |
| Py_DECREF(path); path = NULL; | |
| if (unlikely(!loader)) | |
| goto bad; | |
| file_path = PyObject_GetAttrString(loader, "path"); | |
| Py_DECREF(loader); | |
| 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(path); | |
| Py_XDECREF(file_path); | |
| // set an empty path list on failure | |
| 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; | |
| } | |
| /////////////// TypeImport.proto /////////////// | |
| enum __Pyx_ImportType_CheckSize { | |
| __Pyx_ImportType_CheckSize_Error = 0, | |
| __Pyx_ImportType_CheckSize_Warn = 1, | |
| __Pyx_ImportType_CheckSize_Ignore = 2 | |
| }; | |
| static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); /*proto*/ | |
| /////////////// TypeImport /////////////// | |
| static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, | |
| size_t size, enum __Pyx_ImportType_CheckSize check_size) | |
| { | |
| PyObject *result = 0; | |
| char warning[200]; | |
| Py_ssize_t basicsize; | |
| PyObject *py_basicsize; | |
| 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; | |
| } | |
| basicsize = ((PyTypeObject *)result)->tp_basicsize; | |
| 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; | |
| if ((size_t)basicsize < size) { | |
| PyErr_Format(PyExc_ValueError, | |
| "%.200s.%.200s size changed, may indicate binary incompatibility. " | |
| "Expected %zd from C header, got %zd from PyObject", | |
| module_name, class_name, size, basicsize); | |
| goto bad; | |
| } | |
| if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { | |
| PyErr_Format(PyExc_ValueError, | |
| "%.200s.%.200s size changed, may indicate binary incompatibility. " | |
| "Expected %zd from C header, got %zd from PyObject", | |
| module_name, class_name, size, basicsize); | |
| goto bad; | |
| } | |
| else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { | |
| PyOS_snprintf(warning, sizeof(warning), | |
| "%s.%s size changed, may indicate binary incompatibility. " | |
| "Expected %zd from C header, got %zd from PyObject", | |
| module_name, class_name, size, basicsize); | |
| if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; | |
| } | |
| /* check_size == __Pyx_ImportType_CheckSize_Ignore does not warn nor error */ | |
| return (PyTypeObject *)result; | |
| bad: | |
| Py_XDECREF(result); | |
| return NULL; | |
| } | |
| /////////////// FunctionImport.proto /////////////// | |
| static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /*proto*/ | |
| /////////////// FunctionImport /////////////// | |
| //@substitute: naming | |
| static int __Pyx_ImportFunction(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 (!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); | |
| {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);} | |
| *f = tmp.fp; | |
| if (!(*f)) | |
| goto bad; | |
| Py_DECREF(d); | |
| return 0; | |
| bad: | |
| Py_XDECREF(d); | |
| return -1; | |
| } | |
| /////////////// FunctionExport.proto /////////////// | |
| static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/ | |
| /////////////// FunctionExport /////////////// | |
| //@substitute: naming | |
| 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; | |
| cobj = PyCapsule_New(tmp.p, sig, 0); | |
| cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0); | |
| 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; | |
| } | |
| /////////////// VoidPtrImport.proto /////////////// | |
| static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig); /*proto*/ | |
| /////////////// VoidPtrImport /////////////// | |
| //@substitute: naming | |
| static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) { | |
| PyObject *d = 0; | |
| PyObject *cobj = 0; | |
| d = PyObject_GetAttrString(module, (char *)"$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 (!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); | |
| {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);} | |
| if (!(*p)) | |
| goto bad; | |
| Py_DECREF(d); | |
| return 0; | |
| bad: | |
| Py_XDECREF(d); | |
| return -1; | |
| } | |
| /////////////// VoidPtrExport.proto /////////////// | |
| static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig); /*proto*/ | |
| /////////////// VoidPtrExport /////////////// | |
| //@substitute: naming | |
| //@requires: ObjectHandling.c::PyObjectSetAttrStr | |
| 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; | |
| } | |
| cobj = PyCapsule_New(p, sig, 0); | |
| cobj = PyCObject_FromVoidPtrAndDesc(p, (void *)sig, 0); | |
| 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; | |
| } | |
| /////////////// SetVTable.proto /////////////// | |
| static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ | |
| /////////////// SetVTable /////////////// | |
| static int __Pyx_SetVtable(PyObject *dict, void *vtable) { | |
| PyObject *ob = PyCapsule_New(vtable, 0, 0); | |
| PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); | |
| 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; | |
| } | |
| /////////////// GetVTable.proto /////////////// | |
| static void* __Pyx_GetVtable(PyObject *dict); /*proto*/ | |
| /////////////// GetVTable /////////////// | |
| static void* __Pyx_GetVtable(PyObject *dict) { | |
| void* ptr; | |
| PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__")); | |
| if (!ob) | |
| goto bad; | |
| ptr = PyCapsule_GetPointer(ob, 0); | |
| ptr = PyCObject_AsVoidPtr(ob); | |
| 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; | |
| } | |
| /////////////// MergeVTables.proto /////////////// | |
| //@requires: GetVTable | |
| static int __Pyx_MergeVtables(PyTypeObject *type); /*proto*/ | |
| /////////////// MergeVTables /////////////// | |
| 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; | |
| // Could do MRO resolution of individual methods in the future, assuming | |
| // compatible vtables, but for now simply require a common vtable base. | |
| // Note that if the vtables of various bases are extended separately, | |
| // resolution isn't possible and we must reject it just as when the | |
| // instance struct is so extended. (It would be good to also do this | |
| // check when a multiple-base class is created in pure Python as well.) | |
| 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) { | |
| // No more potential matching bases (with vtables). | |
| 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; | |
| } | |
| /////////////// ImportNumPyArray.proto /////////////// | |
| static PyObject *__pyx_numpy_ndarray = NULL; | |
| static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); /*proto*/ | |
| /////////////// ImportNumPyArray.cleanup /////////////// | |
| Py_CLEAR(__pyx_numpy_ndarray); | |
| /////////////// ImportNumPyArray /////////////// | |
| //@requires: ImportExport.c::Import | |
| 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)) { | |
| // ImportError, AttributeError, ... | |
| 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; | |
| } | |