Spaces:
Build error
Build error
/* | |
* Special implementations of built-in functions and methods. | |
* | |
* Optional optimisations for builtins are in Optimize.c. | |
* | |
* General object operations and protocols are in ObjectHandling.c. | |
*/ | |
//////////////////// Globals.proto //////////////////// | |
static PyObject* __Pyx_Globals(void); /*proto*/ | |
//////////////////// Globals //////////////////// | |
//@substitute: naming | |
//@requires: ObjectHandling.c::GetAttr | |
// This is a stub implementation until we have something more complete. | |
// Currently, we only handle the most common case of a read-only dict | |
// of Python names. Supporting cdef names in the module and write | |
// access requires a rewrite as a dedicated class. | |
static PyObject* __Pyx_Globals(void) { | |
return __Pyx_NewRef($moddict_cname); | |
} | |
//////////////////// PyExecGlobals.proto //////////////////// | |
static PyObject* __Pyx_PyExecGlobals(PyObject*); | |
//////////////////// PyExecGlobals //////////////////// | |
//@substitute: naming | |
//@requires: PyExec | |
static PyObject* __Pyx_PyExecGlobals(PyObject* code) { | |
return __Pyx_PyExec2(code, $moddict_cname); | |
} | |
//////////////////// PyExec.proto //////////////////// | |
static PyObject* __Pyx_PyExec3(PyObject*, PyObject*, PyObject*); | |
static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject*, PyObject*); | |
//////////////////// PyExec //////////////////// | |
//@substitute: naming | |
static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject* o, PyObject* globals) { | |
return __Pyx_PyExec3(o, globals, NULL); | |
} | |
static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals) { | |
PyObject* result; | |
PyObject* s = 0; | |
char *code = 0; | |
if (!globals || globals == Py_None) { | |
globals = $moddict_cname; | |
} else if (unlikely(!PyDict_Check(globals))) { | |
__Pyx_TypeName globals_type_name = | |
__Pyx_PyType_GetName(Py_TYPE(globals)); | |
PyErr_Format(PyExc_TypeError, | |
"exec() arg 2 must be a dict, not " __Pyx_FMT_TYPENAME, | |
globals_type_name); | |
__Pyx_DECREF_TypeName(globals_type_name); | |
goto bad; | |
} | |
if (!locals || locals == Py_None) { | |
locals = globals; | |
} | |
if (__Pyx_PyDict_GetItemStr(globals, PYIDENT("__builtins__")) == NULL) { | |
if (unlikely(PyDict_SetItem(globals, PYIDENT("__builtins__"), PyEval_GetBuiltins()) < 0)) | |
goto bad; | |
} | |
if (PyCode_Check(o)) { | |
if (unlikely(__Pyx_PyCode_HasFreeVars((PyCodeObject *)o))) { | |
PyErr_SetString(PyExc_TypeError, | |
"code object passed to exec() may not contain free variables"); | |
goto bad; | |
} | |
result = PyEval_EvalCode((PyCodeObject *)o, globals, locals); | |
result = PyEval_EvalCode(o, globals, locals); | |
} else { | |
PyCompilerFlags cf; | |
cf.cf_flags = 0; | |
cf.cf_feature_version = PY_MINOR_VERSION; | |
if (PyUnicode_Check(o)) { | |
cf.cf_flags = PyCF_SOURCE_IS_UTF8; | |
s = PyUnicode_AsUTF8String(o); | |
if (unlikely(!s)) goto bad; | |
o = s; | |
} else if (unlikely(!PyBytes_Check(o))) { | |
} else if (unlikely(!PyString_Check(o))) { | |
__Pyx_TypeName o_type_name = __Pyx_PyType_GetName(Py_TYPE(o)); | |
PyErr_Format(PyExc_TypeError, | |
"exec: arg 1 must be string, bytes or code object, got " __Pyx_FMT_TYPENAME, | |
o_type_name); | |
__Pyx_DECREF_TypeName(o_type_name); | |
goto bad; | |
} | |
code = PyBytes_AS_STRING(o); | |
code = PyString_AS_STRING(o); | |
if (PyEval_MergeCompilerFlags(&cf)) { | |
result = PyRun_StringFlags(code, Py_file_input, globals, locals, &cf); | |
} else { | |
result = PyRun_String(code, Py_file_input, globals, locals); | |
} | |
Py_XDECREF(s); | |
} | |
return result; | |
bad: | |
Py_XDECREF(s); | |
return 0; | |
} | |
//////////////////// GetAttr3.proto //////////////////// | |
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); /*proto*/ | |
//////////////////// GetAttr3 //////////////////// | |
//@requires: ObjectHandling.c::PyObjectGetAttrStr | |
//@requires: Exceptions.c::PyThreadStateGet | |
//@requires: Exceptions.c::PyErrFetchRestore | |
//@requires: Exceptions.c::PyErrExceptionMatches | |
static PyObject *__Pyx_GetAttr3Default(PyObject *d) { | |
__Pyx_PyThreadState_declare | |
__Pyx_PyThreadState_assign | |
if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) | |
return NULL; | |
__Pyx_PyErr_Clear(); | |
Py_INCREF(d); | |
return d; | |
} | |
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { | |
PyObject *r; | |
int res = PyObject_GetOptionalAttr(o, n, &r); | |
// On failure (res == -1), r is set to NULL. | |
return (res != 0) ? r : __Pyx_NewRef(d); | |
if (likely(PyString_Check(n))) { | |
r = __Pyx_PyObject_GetAttrStrNoError(o, n); | |
if (unlikely(!r) && likely(!PyErr_Occurred())) { | |
r = __Pyx_NewRef(d); | |
} | |
return r; | |
} | |
r = PyObject_GetAttr(o, n); | |
return (likely(r)) ? r : __Pyx_GetAttr3Default(d); | |
} | |
//////////////////// HasAttr.proto //////////////////// | |
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); /*proto*/ | |
//////////////////// HasAttr //////////////////// | |
//@requires: ObjectHandling.c::GetAttr | |
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { | |
PyObject *r; | |
if (unlikely(!__Pyx_PyBaseString_Check(n))) { | |
PyErr_SetString(PyExc_TypeError, | |
"hasattr(): attribute name must be string"); | |
return -1; | |
} | |
r = __Pyx_GetAttr(o, n); | |
if (!r) { | |
PyErr_Clear(); | |
return 0; | |
} else { | |
Py_DECREF(r); | |
return 1; | |
} | |
} | |
//////////////////// Intern.proto //////////////////// | |
static PyObject* __Pyx_Intern(PyObject* s); /* proto */ | |
//////////////////// Intern //////////////////// | |
//@requires: ObjectHandling.c::RaiseUnexpectedTypeError | |
static PyObject* __Pyx_Intern(PyObject* s) { | |
if (unlikely(!PyString_CheckExact(s))) { | |
__Pyx_RaiseUnexpectedTypeError("str", s); | |
return NULL; | |
} | |
Py_INCREF(s); | |
PyUnicode_InternInPlace(&s); | |
PyString_InternInPlace(&s); | |
return s; | |
} | |
//////////////////// abs_longlong.proto //////////////////// | |
static CYTHON_INLINE PY_LONG_LONG __Pyx_abs_longlong(PY_LONG_LONG x) { | |
return std::abs(x); | |
return llabs(x); | |
// abs() is defined for long, but 64-bits type on MSVC is long long. | |
// Use MS-specific _abs64() instead, which returns the original (negative) value for abs(-MAX-1) | |
return _abs64(x); | |
// gcc or clang on 64 bit windows. | |
return __builtin_llabs(x); | |
if (sizeof(PY_LONG_LONG) <= sizeof(Py_ssize_t)) | |
return __Pyx_sst_abs(x); | |
return (x<0) ? -x : x; | |
} | |
//////////////////// py_abs.proto //////////////////// | |
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *num);/*proto*/ | |
//////////////////// py_abs //////////////////// | |
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *n) { | |
if (likely(__Pyx_PyLong_IsCompact(n))) { | |
return PyLong_FromSize_t(__Pyx_PyLong_CompactValueUnsigned(n)); | |
} | |
if (likely(Py_SIZE(n) == -1)) { | |
// digits are unsigned | |
return PyLong_FromUnsignedLong(__Pyx_PyLong_Digits(n)[0]); | |
} | |
{ | |
PyObject *copy = _PyLong_Copy((PyLongObject*)n); | |
if (likely(copy)) { | |
// clear the sign bits to set the sign from SIGN_NEGATIVE (2) to positive (0) | |
((PyLongObject*)copy)->long_value.lv_tag = ((PyLongObject*)copy)->long_value.lv_tag & ~_PyLong_SIGN_MASK; | |
// negate the size to swap the sign | |
__Pyx_SET_SIZE(copy, -Py_SIZE(copy)); | |
} | |
return copy; | |
} | |
return PyNumber_Negative(n); | |
} | |
//////////////////// pow2.proto //////////////////// | |
//////////////////// int_pyucs4.proto //////////////////// | |
static CYTHON_INLINE int __Pyx_int_from_UCS4(Py_UCS4 uchar); | |
//////////////////// int_pyucs4 //////////////////// | |
static int __Pyx_int_from_UCS4(Py_UCS4 uchar) { | |
int digit = Py_UNICODE_TODIGIT(uchar); | |
if (unlikely(digit < 0)) { | |
PyErr_Format(PyExc_ValueError, | |
"invalid literal for int() with base 10: '%c'", | |
(int) uchar); | |
return -1; | |
} | |
return digit; | |
} | |
//////////////////// float_pyucs4.proto //////////////////// | |
static CYTHON_INLINE double __Pyx_double_from_UCS4(Py_UCS4 uchar); | |
//////////////////// float_pyucs4 //////////////////// | |
static double __Pyx_double_from_UCS4(Py_UCS4 uchar) { | |
double digit = Py_UNICODE_TONUMERIC(uchar); | |
if (unlikely(digit < 0.0)) { | |
PyErr_Format(PyExc_ValueError, | |
"could not convert string to float: '%c'", | |
(int) uchar); | |
return -1.0; | |
} | |
return digit; | |
} | |
//////////////////// object_ord.proto //////////////////// | |
//@requires: TypeConversion.c::UnicodeAsUCS4 | |
static long __Pyx__PyObject_Ord(PyObject* c); /*proto*/ | |
//////////////////// object_ord //////////////////// | |
static long __Pyx__PyObject_Ord(PyObject* c) { | |
Py_ssize_t size; | |
if (PyBytes_Check(c)) { | |
size = PyBytes_GET_SIZE(c); | |
if (likely(size == 1)) { | |
return (unsigned char) PyBytes_AS_STRING(c)[0]; | |
} | |
} else if (PyUnicode_Check(c)) { | |
return (long)__Pyx_PyUnicode_AsPy_UCS4(c); | |
} else if (PyByteArray_Check(c)) { | |
size = PyByteArray_GET_SIZE(c); | |
if (likely(size == 1)) { | |
return (unsigned char) PyByteArray_AS_STRING(c)[0]; | |
} | |
} else { | |
// FIXME: support character buffers - but CPython doesn't support them either | |
__Pyx_TypeName c_type_name = __Pyx_PyType_GetName(Py_TYPE(c)); | |
PyErr_Format(PyExc_TypeError, | |
"ord() expected string of length 1, but " __Pyx_FMT_TYPENAME " found", | |
c_type_name); | |
__Pyx_DECREF_TypeName(c_type_name); | |
return (long)(Py_UCS4)-1; | |
} | |
PyErr_Format(PyExc_TypeError, | |
"ord() expected a character, but string of length %zd found", size); | |
return (long)(Py_UCS4)-1; | |
} | |
//////////////////// py_dict_keys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_keys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return PyDict_Keys(d); | |
} | |
//////////////////// py_dict_values.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/ | |
//////////////////// py_dict_values //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return PyDict_Values(d); | |
} | |
//////////////////// py_dict_items.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d); /*proto*/ | |
//////////////////// py_dict_items //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return PyDict_Items(d); | |
} | |
//////////////////// py_dict_iterkeys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_iterkeys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterKeys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "iterkeys", d); | |
} | |
//////////////////// py_dict_itervalues.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d); /*proto*/ | |
//////////////////// py_dict_itervalues //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterValues(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "itervalues", d); | |
} | |
//////////////////// py_dict_iteritems.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d); /*proto*/ | |
//////////////////// py_dict_iteritems //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_IterItems(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "iteritems", d); | |
} | |
//////////////////// py_dict_viewkeys.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewkeys //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewKeys(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "keys", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewkeys", d); | |
} | |
//////////////////// py_dict_viewvalues.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewvalues //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewValues(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "values", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewvalues", d); | |
} | |
//////////////////// py_dict_viewitems.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d); /*proto*/ | |
//////////////////// py_dict_viewitems //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyDict_ViewItems(PyObject* d) { | |
if (PY_MAJOR_VERSION >= 3) | |
return CALL_UNBOUND_METHOD(PyDict_Type, "items", d); | |
else | |
return CALL_UNBOUND_METHOD(PyDict_Type, "viewitems", d); | |
} | |
//////////////////// pyfrozenset_new.proto //////////////////// | |
static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it); | |
//////////////////// pyfrozenset_new //////////////////// | |
//@substitute: naming | |
static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) { | |
if (it) { | |
PyObject* result; | |
// PyPy currently lacks PyFrozenSet_CheckExact() and PyFrozenSet_New() | |
PyObject* args; | |
args = PyTuple_Pack(1, it); | |
if (unlikely(!args)) | |
return NULL; | |
result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL); | |
Py_DECREF(args); | |
return result; | |
if (PyFrozenSet_CheckExact(it)) { | |
Py_INCREF(it); | |
return it; | |
} | |
result = PyFrozenSet_New(it); | |
if (unlikely(!result)) | |
return NULL; | |
if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result))) | |
return result; | |
// empty frozenset is a singleton (on Python <3.10) | |
// seems wasteful, but CPython does the same | |
Py_DECREF(result); | |
} | |
return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, $empty_tuple, NULL); | |
return PyObject_Call((PyObject*)&PyFrozenSet_Type, $empty_tuple, NULL); | |
} | |
//////////////////// PySet_Update.proto //////////////////// | |
static CYTHON_INLINE int __Pyx_PySet_Update(PyObject* set, PyObject* it); /*proto*/ | |
//////////////////// PySet_Update //////////////////// | |
static CYTHON_INLINE int __Pyx_PySet_Update(PyObject* set, PyObject* it) { | |
PyObject *retval; | |
if (PyAnySet_Check(it)) { | |
if (PySet_GET_SIZE(it) == 0) | |
return 0; | |
// fast and safe case: CPython will update our result set and return it | |
retval = PySet_Type.tp_as_number->nb_inplace_or(set, it); | |
if (likely(retval == set)) { | |
Py_DECREF(retval); | |
return 0; | |
} | |
if (unlikely(!retval)) | |
return -1; | |
// unusual result, fall through to set.update() call below | |
Py_DECREF(retval); | |
} | |
retval = CALL_UNBOUND_METHOD(PySet_Type, "update", set, it); | |
if (unlikely(!retval)) return -1; | |
Py_DECREF(retval); | |
return 0; | |
} | |
///////////////// memoryview_get_from_buffer.proto //////////////////// | |
// buffer is in limited api from Py3.11 | |
{{py: | |
out_types = dict( | |
ndim='int', readonly='int', | |
len='Py_ssize_t', itemsize='Py_ssize_t') | |
}} // can't get format like this unfortunately. It's unicode via getattr | |
{{py: out_type = out_types[name]}} | |
static {{out_type}} __Pyx_PyMemoryView_Get_{{name}}(PyObject *obj); /* proto */ | |
////////////// memoryview_get_from_buffer ///////////////////////// | |
{{py: | |
out_types = dict( | |
ndim='int', readonly='int', | |
len='Py_ssize_t', itemsize='Py_ssize_t') | |
}} | |
{{py: out_type = out_types[name]}} | |
static {{out_type}} __Pyx_PyMemoryView_Get_{{name}}(PyObject *obj) { | |
{{out_type}} result; | |
PyObject *attr = PyObject_GetAttr(obj, PYIDENT("{{name}}")); | |
if (!attr) { | |
goto bad; | |
} | |
{{if out_type == 'int'}} | |
// I'm not worrying about overflow here because | |
// ultimately it comes from a C struct that's an int | |
result = PyLong_AsLong(attr); | |
{{elif out_type == 'Py_ssize_t'}} | |
result = PyLong_AsSsize_t(attr); | |
{{endif}} | |
Py_DECREF(attr); | |
return result; | |
bad: | |
Py_XDECREF(attr); | |
return -1; | |
} | |