__Pyx_FetchSharedCythonABIModule(void)1 static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
2     PyObject *abi_module = PyImport_AddModule((char*) __PYX_ABI_MODULE_NAME);
3     if (!abi_module) return NULL;
4     Py_INCREF(abi_module);
5     return abi_module;
6 }
__Pyx_VerifyCachedType(PyObject * cached_type,const char * name,Py_ssize_t basicsize,Py_ssize_t expected_basicsize)7 static int __Pyx_VerifyCachedType(PyObject *cached_type,
8                                const char *name,
9                                Py_ssize_t basicsize,
10                                Py_ssize_t expected_basicsize) {
11     if (!PyType_Check(cached_type)) {
12         PyErr_Format(PyExc_TypeError,
13             "Shared Cython type %.200s is not a type object", name);
14         return -1;
15     }
16     if (basicsize != expected_basicsize) {
17         PyErr_Format(PyExc_TypeError,
18             "Shared Cython type %.200s has the wrong size, try recompiling",
19             name);
20         return -1;
21     }
22     return 0;
23 }
24 #if !CYTHON_USE_TYPE_SPECS
__Pyx_FetchCommonType(PyTypeObject * type)25 static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
26     PyObject* abi_module;
27     PyTypeObject *cached_type = NULL;
28     abi_module = __Pyx_FetchSharedCythonABIModule();
29     if (!abi_module) return NULL;
30     cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, type->tp_name);
31     if (cached_type) {
32         if (__Pyx_VerifyCachedType(
33               (PyObject *)cached_type,
34               type->tp_name,
35               cached_type->tp_basicsize,
36               type->tp_basicsize) < 0) {
37             goto bad;
38         }
39         goto done;
40     }
41     if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
42     PyErr_Clear();
43     if (PyType_Ready(type) < 0) goto bad;
44     if (PyObject_SetAttrString(abi_module, type->tp_name, (PyObject *)type) < 0)
45         goto bad;
46     Py_INCREF(type);
47     cached_type = type;
48 done:
49     Py_DECREF(abi_module);
50     return cached_type;
51 bad:
52     Py_XDECREF(cached_type);
53     cached_type = NULL;
54     goto done;
55 }
56 #else
__Pyx_FetchCommonTypeFromSpec(PyObject * module,PyType_Spec * spec,PyObject * bases)57 static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) {
58     PyObject *abi_module, *cached_type = NULL;
59     abi_module = __Pyx_FetchSharedCythonABIModule();
60     if (!abi_module) return NULL;
61     cached_type = PyObject_GetAttrString(abi_module, spec->name);
62     if (cached_type) {
63         Py_ssize_t basicsize;
64 #if CYTHON_COMPILING_IN_LIMITED_API
65         PyObject *py_basicsize;
66         py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
67         if (unlikely(!py_basicsize)) goto bad;
68         basicsize = PyLong_AsSsize_t(py_basicsize);
69         Py_DECREF(py_basicsize);
70         py_basicsize = 0;
71         if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
72 #else
73         basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1;
74 #endif
75         if (__Pyx_VerifyCachedType(
76               cached_type,
77               spec->name,
78               basicsize,
79               spec->basicsize) < 0) {
80             goto bad;
81         }
82         goto done;
83     }
84     if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
85     PyErr_Clear();
86     (void) module;
87     cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases);
88     if (unlikely(!cached_type)) goto bad;
89     if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
90     if (PyObject_SetAttrString(abi_module, spec->name, cached_type) < 0) goto bad;
91 done:
92     Py_DECREF(abi_module);
93     assert(cached_type == NULL || PyType_Check(cached_type));
94     return (PyTypeObject *) cached_type;
95 bad:
96     Py_XDECREF(cached_type);
97     cached_type = NULL;
98     goto done;
99 }
100 #endif
101 
102