| | |
| |
|
| |
|
| | #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact) \ |
| | ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 : \ |
| | __Pyx__ArgTypeTest(obj, type, name, exact)) |
| |
|
| | static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); |
| |
|
| | |
| |
|
| | static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) |
| | { |
| | if (unlikely(!type)) { |
| | PyErr_SetString(PyExc_SystemError, "Missing type object"); |
| | return 0; |
| | } |
| | else if (exact) { |
| | #if PY_MAJOR_VERSION == 2 |
| | if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; |
| | #endif |
| | } |
| | else { |
| | if (likely(__Pyx_TypeCheck(obj, type))) return 1; |
| | } |
| | PyErr_Format(PyExc_TypeError, |
| | "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", |
| | name, type->tp_name, Py_TYPE(obj)->tp_name); |
| | return 0; |
| | } |
| |
|
| | |
| |
|
| | static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, |
| | Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); |
| |
|
| | |
| |
|
| | |
| | |
| | |
| |
|
| | static void __Pyx_RaiseArgtupleInvalid( |
| | const char* func_name, |
| | int exact, |
| | Py_ssize_t num_min, |
| | Py_ssize_t num_max, |
| | Py_ssize_t num_found) |
| | { |
| | Py_ssize_t num_expected; |
| | const char *more_or_less; |
| |
|
| | if (num_found < num_min) { |
| | num_expected = num_min; |
| | more_or_less = "at least"; |
| | } else { |
| | num_expected = num_max; |
| | more_or_less = "at most"; |
| | } |
| | if (exact) { |
| | more_or_less = "exactly"; |
| | } |
| | PyErr_Format(PyExc_TypeError, |
| | "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", |
| | func_name, more_or_less, num_expected, |
| | (num_expected == 1) ? "" : "s", num_found); |
| | } |
| |
|
| |
|
| | |
| |
|
| | static void __Pyx_RaiseKeywordRequired(const char* func_name, PyObject* kw_name); |
| |
|
| | |
| |
|
| | static void __Pyx_RaiseKeywordRequired(const char* func_name, PyObject* kw_name) { |
| | PyErr_Format(PyExc_TypeError, |
| | #if PY_MAJOR_VERSION >= 3 |
| | "%s() needs keyword-only argument %U", func_name, kw_name); |
| | #else |
| | "%s() needs keyword-only argument %s", func_name, |
| | PyString_AS_STRING(kw_name)); |
| | #endif |
| | } |
| |
|
| |
|
| | |
| |
|
| | static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); |
| |
|
| | |
| |
|
| | static void __Pyx_RaiseDoubleKeywordsError( |
| | const char* func_name, |
| | PyObject* kw_name) |
| | { |
| | PyErr_Format(PyExc_TypeError, |
| | #if PY_MAJOR_VERSION >= 3 |
| | "%s() got multiple values for keyword argument '%U'", func_name, kw_name); |
| | #else |
| | "%s() got multiple values for keyword argument '%s'", func_name, |
| | PyString_AsString(kw_name)); |
| | #endif |
| | } |
| |
|
| |
|
| | |
| |
|
| | static void __Pyx_RaiseMappingExpectedError(PyObject* arg); |
| |
|
| | |
| |
|
| | static void __Pyx_RaiseMappingExpectedError(PyObject* arg) { |
| | PyErr_Format(PyExc_TypeError, "'%.200s' object is not a mapping", Py_TYPE(arg)->tp_name); |
| | } |
| |
|
| |
|
| | |
| |
|
| | static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); |
| |
|
| | |
| |
|
| | |
| | |
| | |
| |
|
| | static int __Pyx_CheckKeywordStrings( |
| | PyObject *kwdict, |
| | const char* function_name, |
| | int kw_allowed) |
| | { |
| | PyObject* key = 0; |
| | Py_ssize_t pos = 0; |
| | #if CYTHON_COMPILING_IN_PYPY |
| | |
| | if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) |
| | goto invalid_keyword; |
| | return 1; |
| | #else |
| | while (PyDict_Next(kwdict, &pos, &key, 0)) { |
| | #if PY_MAJOR_VERSION < 3 |
| | if (unlikely(!PyString_Check(key))) |
| | #endif |
| | if (unlikely(!PyUnicode_Check(key))) |
| | goto invalid_keyword_type; |
| | } |
| | if ((!kw_allowed) && unlikely(key)) |
| | goto invalid_keyword; |
| | return 1; |
| | invalid_keyword_type: |
| | PyErr_Format(PyExc_TypeError, |
| | "%.200s() keywords must be strings", function_name); |
| | return 0; |
| | #endif |
| | invalid_keyword: |
| | PyErr_Format(PyExc_TypeError, |
| | #if PY_MAJOR_VERSION < 3 |
| | "%.200s() got an unexpected keyword argument '%.200s'", |
| | function_name, PyString_AsString(key)); |
| | #else |
| | "%s() got an unexpected keyword argument '%U'", |
| | function_name, key); |
| | #endif |
| | return 0; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ |
| | PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ |
| | const char* function_name); |
| |
|
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | static int __Pyx_ParseOptionalKeywords( |
| | PyObject *kwds, |
| | PyObject **argnames[], |
| | PyObject *kwds2, |
| | PyObject *values[], |
| | Py_ssize_t num_pos_args, |
| | const char* function_name) |
| | { |
| | PyObject *key = 0, *value = 0; |
| | Py_ssize_t pos = 0; |
| | PyObject*** name; |
| | PyObject*** first_kw_arg = argnames + num_pos_args; |
| |
|
| | while (PyDict_Next(kwds, &pos, &key, &value)) { |
| | name = first_kw_arg; |
| | while (*name && (**name != key)) name++; |
| | if (*name) { |
| | values[name-argnames] = value; |
| | continue; |
| | } |
| |
|
| | name = first_kw_arg; |
| | #if PY_MAJOR_VERSION < 3 |
| | if (likely(PyString_Check(key))) { |
| | while (*name) { |
| | if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) |
| | && _PyString_Eq(**name, key)) { |
| | values[name-argnames] = value; |
| | break; |
| | } |
| | name++; |
| | } |
| | if (*name) continue; |
| | else { |
| | |
| | PyObject*** argname = argnames; |
| | while (argname != first_kw_arg) { |
| | if ((**argname == key) || ( |
| | (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) |
| | && _PyString_Eq(**argname, key))) { |
| | goto arg_passed_twice; |
| | } |
| | argname++; |
| | } |
| | } |
| | } else |
| | #endif |
| | if (likely(PyUnicode_Check(key))) { |
| | while (*name) { |
| | int cmp = (**name == key) ? 0 : |
| | #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 |
| | (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : |
| | #endif |
| | |
| | PyUnicode_Compare(**name, key); |
| | if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; |
| | if (cmp == 0) { |
| | values[name-argnames] = value; |
| | break; |
| | } |
| | name++; |
| | } |
| | if (*name) continue; |
| | else { |
| | |
| | PyObject*** argname = argnames; |
| | while (argname != first_kw_arg) { |
| | int cmp = (**argname == key) ? 0 : |
| | #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 |
| | (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : |
| | #endif |
| | |
| | PyUnicode_Compare(**argname, key); |
| | if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; |
| | if (cmp == 0) goto arg_passed_twice; |
| | argname++; |
| | } |
| | } |
| | } else |
| | goto invalid_keyword_type; |
| |
|
| | if (kwds2) { |
| | if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; |
| | } else { |
| | goto invalid_keyword; |
| | } |
| | } |
| | return 0; |
| | arg_passed_twice: |
| | __Pyx_RaiseDoubleKeywordsError(function_name, key); |
| | goto bad; |
| | invalid_keyword_type: |
| | PyErr_Format(PyExc_TypeError, |
| | "%.200s() keywords must be strings", function_name); |
| | goto bad; |
| | invalid_keyword: |
| | PyErr_Format(PyExc_TypeError, |
| | #if PY_MAJOR_VERSION < 3 |
| | "%.200s() got an unexpected keyword argument '%.200s'", |
| | function_name, PyString_AsString(key)); |
| | #else |
| | "%s() got an unexpected keyword argument '%U'", |
| | function_name, key); |
| | #endif |
| | bad: |
| | return -1; |
| | } |
| |
|
| |
|
| | |
| |
|
| | static int __Pyx_MergeKeywords(PyObject *kwdict, PyObject *source_mapping); |
| |
|
| | |
| | |
| | |
| |
|
| | static int __Pyx_MergeKeywords(PyObject *kwdict, PyObject *source_mapping) { |
| | PyObject *iter, *key = NULL, *value = NULL; |
| | int source_is_dict, result; |
| | Py_ssize_t orig_length, ppos = 0; |
| |
|
| | iter = __Pyx_dict_iterator(source_mapping, 0, PYIDENT("items"), &orig_length, &source_is_dict); |
| | if (unlikely(!iter)) { |
| | |
| | PyObject *args; |
| | if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; |
| | PyErr_Clear(); |
| | args = PyTuple_Pack(1, source_mapping); |
| | if (likely(args)) { |
| | PyObject *fallback = PyObject_Call((PyObject*)&PyDict_Type, args, NULL); |
| | Py_DECREF(args); |
| | if (likely(fallback)) { |
| | iter = __Pyx_dict_iterator(fallback, 1, PYIDENT("items"), &orig_length, &source_is_dict); |
| | Py_DECREF(fallback); |
| | } |
| | } |
| | if (unlikely(!iter)) goto bad; |
| | } |
| |
|
| | while (1) { |
| | result = __Pyx_dict_iter_next(iter, orig_length, &ppos, &key, &value, NULL, source_is_dict); |
| | if (unlikely(result < 0)) goto bad; |
| | if (!result) break; |
| |
|
| | if (unlikely(PyDict_Contains(kwdict, key))) { |
| | __Pyx_RaiseDoubleKeywordsError("function", key); |
| | result = -1; |
| | } else { |
| | result = PyDict_SetItem(kwdict, key, value); |
| | } |
| | Py_DECREF(key); |
| | Py_DECREF(value); |
| | if (unlikely(result < 0)) goto bad; |
| | } |
| | Py_XDECREF(iter); |
| | return 0; |
| |
|
| | bad: |
| | Py_XDECREF(iter); |
| | return -1; |
| | } |
| |
|