| /*[clinic input] |
| preserve |
| [clinic start generated code]*/ |
| |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| # include "pycore_gc.h" // PyGC_Head |
| # include "pycore_runtime.h" // _Py_ID() |
| #endif |
| #include "pycore_abstract.h" // _PyNumber_Index() |
| #include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION() |
| #include "pycore_modsupport.h" // _PyArg_CheckPositional() |
| |
| PyDoc_STRVAR(deque_pop__doc__, |
| "pop($self, /)\n" |
| "--\n" |
| "\n" |
| "Remove and return the rightmost element."); |
| |
| #define DEQUE_POP_METHODDEF \ |
| {"pop", (PyCFunction)deque_pop, METH_NOARGS, deque_pop__doc__}, |
| |
| static PyObject * |
| deque_pop_impl(dequeobject *deque); |
| |
| static PyObject * |
| deque_pop(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_pop_impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_popleft__doc__, |
| "popleft($self, /)\n" |
| "--\n" |
| "\n" |
| "Remove and return the leftmost element."); |
| |
| #define DEQUE_POPLEFT_METHODDEF \ |
| {"popleft", (PyCFunction)deque_popleft, METH_NOARGS, deque_popleft__doc__}, |
| |
| static PyObject * |
| deque_popleft_impl(dequeobject *deque); |
| |
| static PyObject * |
| deque_popleft(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_popleft_impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_append__doc__, |
| "append($self, item, /)\n" |
| "--\n" |
| "\n" |
| "Add an element to the right side of the deque."); |
| |
| #define DEQUE_APPEND_METHODDEF \ |
| {"append", (PyCFunction)deque_append, METH_O, deque_append__doc__}, |
| |
| static PyObject * |
| deque_append_impl(dequeobject *deque, PyObject *item); |
| |
| static PyObject * |
| deque_append(dequeobject *deque, PyObject *item) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_append_impl(deque, item); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_appendleft__doc__, |
| "appendleft($self, item, /)\n" |
| "--\n" |
| "\n" |
| "Add an element to the left side of the deque."); |
| |
| #define DEQUE_APPENDLEFT_METHODDEF \ |
| {"appendleft", (PyCFunction)deque_appendleft, METH_O, deque_appendleft__doc__}, |
| |
| static PyObject * |
| deque_appendleft_impl(dequeobject *deque, PyObject *item); |
| |
| static PyObject * |
| deque_appendleft(dequeobject *deque, PyObject *item) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_appendleft_impl(deque, item); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_extend__doc__, |
| "extend($self, iterable, /)\n" |
| "--\n" |
| "\n" |
| "Extend the right side of the deque with elements from the iterable."); |
| |
| #define DEQUE_EXTEND_METHODDEF \ |
| {"extend", (PyCFunction)deque_extend, METH_O, deque_extend__doc__}, |
| |
| static PyObject * |
| deque_extend_impl(dequeobject *deque, PyObject *iterable); |
| |
| static PyObject * |
| deque_extend(dequeobject *deque, PyObject *iterable) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_extend_impl(deque, iterable); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_extendleft__doc__, |
| "extendleft($self, iterable, /)\n" |
| "--\n" |
| "\n" |
| "Extend the left side of the deque with elements from the iterable."); |
| |
| #define DEQUE_EXTENDLEFT_METHODDEF \ |
| {"extendleft", (PyCFunction)deque_extendleft, METH_O, deque_extendleft__doc__}, |
| |
| static PyObject * |
| deque_extendleft_impl(dequeobject *deque, PyObject *iterable); |
| |
| static PyObject * |
| deque_extendleft(dequeobject *deque, PyObject *iterable) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_extendleft_impl(deque, iterable); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_copy__doc__, |
| "copy($self, /)\n" |
| "--\n" |
| "\n" |
| "Return a shallow copy of a deque."); |
| |
| #define DEQUE_COPY_METHODDEF \ |
| {"copy", (PyCFunction)deque_copy, METH_NOARGS, deque_copy__doc__}, |
| |
| static PyObject * |
| deque_copy_impl(dequeobject *deque); |
| |
| static PyObject * |
| deque_copy(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_copy_impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque___copy____doc__, |
| "__copy__($self, /)\n" |
| "--\n" |
| "\n" |
| "Return a shallow copy of a deque."); |
| |
| #define DEQUE___COPY___METHODDEF \ |
| {"__copy__", (PyCFunction)deque___copy__, METH_NOARGS, deque___copy____doc__}, |
| |
| static PyObject * |
| deque___copy___impl(dequeobject *deque); |
| |
| static PyObject * |
| deque___copy__(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque___copy___impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_clearmethod__doc__, |
| "clear($self, /)\n" |
| "--\n" |
| "\n" |
| "Remove all elements from the deque."); |
| |
| #define DEQUE_CLEARMETHOD_METHODDEF \ |
| {"clear", (PyCFunction)deque_clearmethod, METH_NOARGS, deque_clearmethod__doc__}, |
| |
| static PyObject * |
| deque_clearmethod_impl(dequeobject *deque); |
| |
| static PyObject * |
| deque_clearmethod(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_clearmethod_impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_rotate__doc__, |
| "rotate($self, n=1, /)\n" |
| "--\n" |
| "\n" |
| "Rotate the deque n steps to the right. If n is negative, rotates left."); |
| |
| #define DEQUE_ROTATE_METHODDEF \ |
| {"rotate", _PyCFunction_CAST(deque_rotate), METH_FASTCALL, deque_rotate__doc__}, |
| |
| static PyObject * |
| deque_rotate_impl(dequeobject *deque, Py_ssize_t n); |
| |
| static PyObject * |
| deque_rotate(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| Py_ssize_t n = 1; |
| |
| if (!_PyArg_CheckPositional("rotate", nargs, 0, 1)) { |
| goto exit; |
| } |
| if (nargs < 1) { |
| goto skip_optional; |
| } |
| { |
| Py_ssize_t ival = -1; |
| PyObject *iobj = _PyNumber_Index(args[0]); |
| if (iobj != NULL) { |
| ival = PyLong_AsSsize_t(iobj); |
| Py_DECREF(iobj); |
| } |
| if (ival == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| n = ival; |
| } |
| skip_optional: |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_rotate_impl(deque, n); |
| Py_END_CRITICAL_SECTION(); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_reverse__doc__, |
| "reverse($self, /)\n" |
| "--\n" |
| "\n" |
| "Reverse *IN PLACE*."); |
| |
| #define DEQUE_REVERSE_METHODDEF \ |
| {"reverse", (PyCFunction)deque_reverse, METH_NOARGS, deque_reverse__doc__}, |
| |
| static PyObject * |
| deque_reverse_impl(dequeobject *deque); |
| |
| static PyObject * |
| deque_reverse(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_reverse_impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_count__doc__, |
| "count($self, value, /)\n" |
| "--\n" |
| "\n" |
| "Return number of occurrences of value."); |
| |
| #define DEQUE_COUNT_METHODDEF \ |
| {"count", (PyCFunction)deque_count, METH_O, deque_count__doc__}, |
| |
| static PyObject * |
| deque_count_impl(dequeobject *deque, PyObject *v); |
| |
| static PyObject * |
| deque_count(dequeobject *deque, PyObject *v) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_count_impl(deque, v); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_index__doc__, |
| "index($self, value, [start, [stop]])\n" |
| "--\n" |
| "\n" |
| "Return first index of value.\n" |
| "\n" |
| "Raises ValueError if the value is not present."); |
| |
| #define DEQUE_INDEX_METHODDEF \ |
| {"index", _PyCFunction_CAST(deque_index), METH_FASTCALL, deque_index__doc__}, |
| |
| static PyObject * |
| deque_index_impl(dequeobject *deque, PyObject *v, Py_ssize_t start, |
| Py_ssize_t stop); |
| |
| static PyObject * |
| deque_index(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *v; |
| Py_ssize_t start = 0; |
| Py_ssize_t stop = Py_SIZE(deque); |
| |
| if (!_PyArg_CheckPositional("index", nargs, 1, 3)) { |
| goto exit; |
| } |
| v = args[0]; |
| if (nargs < 2) { |
| goto skip_optional; |
| } |
| if (!_PyEval_SliceIndexNotNone(args[1], &start)) { |
| goto exit; |
| } |
| if (nargs < 3) { |
| goto skip_optional; |
| } |
| if (!_PyEval_SliceIndexNotNone(args[2], &stop)) { |
| goto exit; |
| } |
| skip_optional: |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_index_impl(deque, v, start, stop); |
| Py_END_CRITICAL_SECTION(); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_insert__doc__, |
| "insert($self, index, value, /)\n" |
| "--\n" |
| "\n" |
| "Insert value before index."); |
| |
| #define DEQUE_INSERT_METHODDEF \ |
| {"insert", _PyCFunction_CAST(deque_insert), METH_FASTCALL, deque_insert__doc__}, |
| |
| static PyObject * |
| deque_insert_impl(dequeobject *deque, Py_ssize_t index, PyObject *value); |
| |
| static PyObject * |
| deque_insert(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| Py_ssize_t index; |
| PyObject *value; |
| |
| if (!_PyArg_CheckPositional("insert", nargs, 2, 2)) { |
| goto exit; |
| } |
| { |
| Py_ssize_t ival = -1; |
| PyObject *iobj = _PyNumber_Index(args[0]); |
| if (iobj != NULL) { |
| ival = PyLong_AsSsize_t(iobj); |
| Py_DECREF(iobj); |
| } |
| if (ival == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| index = ival; |
| } |
| value = args[1]; |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_insert_impl(deque, index, value); |
| Py_END_CRITICAL_SECTION(); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque_remove__doc__, |
| "remove($self, value, /)\n" |
| "--\n" |
| "\n" |
| "Remove first occurrence of value."); |
| |
| #define DEQUE_REMOVE_METHODDEF \ |
| {"remove", (PyCFunction)deque_remove, METH_O, deque_remove__doc__}, |
| |
| static PyObject * |
| deque_remove_impl(dequeobject *deque, PyObject *value); |
| |
| static PyObject * |
| deque_remove(dequeobject *deque, PyObject *value) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_remove_impl(deque, value); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque___reduce____doc__, |
| "__reduce__($self, /)\n" |
| "--\n" |
| "\n" |
| "Return state information for pickling."); |
| |
| #define DEQUE___REDUCE___METHODDEF \ |
| {"__reduce__", (PyCFunction)deque___reduce__, METH_NOARGS, deque___reduce____doc__}, |
| |
| static PyObject * |
| deque___reduce___impl(dequeobject *deque); |
| |
| static PyObject * |
| deque___reduce__(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| return deque___reduce___impl(deque); |
| } |
| |
| PyDoc_STRVAR(deque_init__doc__, |
| "deque([iterable[, maxlen]])\n" |
| "--\n" |
| "\n" |
| "A list-like sequence optimized for data accesses near its endpoints."); |
| |
| static int |
| deque_init_impl(dequeobject *deque, PyObject *iterable, PyObject *maxlenobj); |
| |
| static int |
| deque_init(PyObject *deque, PyObject *args, PyObject *kwargs) |
| { |
| int return_value = -1; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(iterable), &_Py_ID(maxlen), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"iterable", "maxlen", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "deque", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| PyObject * const *fastargs; |
| Py_ssize_t nargs = PyTuple_GET_SIZE(args); |
| Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0; |
| PyObject *iterable = NULL; |
| PyObject *maxlenobj = NULL; |
| |
| fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 2, 0, argsbuf); |
| if (!fastargs) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_pos; |
| } |
| if (fastargs[0]) { |
| iterable = fastargs[0]; |
| if (!--noptargs) { |
| goto skip_optional_pos; |
| } |
| } |
| maxlenobj = fastargs[1]; |
| skip_optional_pos: |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque_init_impl((dequeobject *)deque, iterable, maxlenobj); |
| Py_END_CRITICAL_SECTION(); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque___sizeof____doc__, |
| "__sizeof__($self, /)\n" |
| "--\n" |
| "\n" |
| "Return the size of the deque in memory, in bytes."); |
| |
| #define DEQUE___SIZEOF___METHODDEF \ |
| {"__sizeof__", (PyCFunction)deque___sizeof__, METH_NOARGS, deque___sizeof____doc__}, |
| |
| static PyObject * |
| deque___sizeof___impl(dequeobject *deque); |
| |
| static PyObject * |
| deque___sizeof__(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| PyObject *return_value = NULL; |
| |
| Py_BEGIN_CRITICAL_SECTION(deque); |
| return_value = deque___sizeof___impl(deque); |
| Py_END_CRITICAL_SECTION(); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(deque___reversed____doc__, |
| "__reversed__($self, /)\n" |
| "--\n" |
| "\n" |
| "Return a reverse iterator over the deque."); |
| |
| #define DEQUE___REVERSED___METHODDEF \ |
| {"__reversed__", (PyCFunction)deque___reversed__, METH_NOARGS, deque___reversed____doc__}, |
| |
| static PyObject * |
| deque___reversed___impl(dequeobject *deque); |
| |
| static PyObject * |
| deque___reversed__(dequeobject *deque, PyObject *Py_UNUSED(ignored)) |
| { |
| return deque___reversed___impl(deque); |
| } |
| |
| PyDoc_STRVAR(_collections__count_elements__doc__, |
| "_count_elements($module, mapping, iterable, /)\n" |
| "--\n" |
| "\n" |
| "Count elements in the iterable, updating the mapping"); |
| |
| #define _COLLECTIONS__COUNT_ELEMENTS_METHODDEF \ |
| {"_count_elements", _PyCFunction_CAST(_collections__count_elements), METH_FASTCALL, _collections__count_elements__doc__}, |
| |
| static PyObject * |
| _collections__count_elements_impl(PyObject *module, PyObject *mapping, |
| PyObject *iterable); |
| |
| static PyObject * |
| _collections__count_elements(PyObject *module, PyObject *const *args, Py_ssize_t nargs) |
| { |
| PyObject *return_value = NULL; |
| PyObject *mapping; |
| PyObject *iterable; |
| |
| if (!_PyArg_CheckPositional("_count_elements", nargs, 2, 2)) { |
| goto exit; |
| } |
| mapping = args[0]; |
| iterable = args[1]; |
| return_value = _collections__count_elements_impl(module, mapping, iterable); |
| |
| exit: |
| return return_value; |
| } |
| |
| static PyObject * |
| tuplegetter_new_impl(PyTypeObject *type, Py_ssize_t index, PyObject *doc); |
| |
| static PyObject * |
| tuplegetter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) |
| { |
| PyObject *return_value = NULL; |
| PyTypeObject *base_tp = clinic_state()->tuplegetter_type; |
| Py_ssize_t index; |
| PyObject *doc; |
| |
| if ((type == base_tp || type->tp_init == base_tp->tp_init) && |
| !_PyArg_NoKeywords("_tuplegetter", kwargs)) { |
| goto exit; |
| } |
| if (!_PyArg_CheckPositional("_tuplegetter", PyTuple_GET_SIZE(args), 2, 2)) { |
| goto exit; |
| } |
| { |
| Py_ssize_t ival = -1; |
| PyObject *iobj = _PyNumber_Index(PyTuple_GET_ITEM(args, 0)); |
| if (iobj != NULL) { |
| ival = PyLong_AsSsize_t(iobj); |
| Py_DECREF(iobj); |
| } |
| if (ival == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| index = ival; |
| } |
| doc = PyTuple_GET_ITEM(args, 1); |
| return_value = tuplegetter_new_impl(type, index, doc); |
| |
| exit: |
| return return_value; |
| } |
| /*[clinic end generated code: output=64c32b16df7be07a input=a9049054013a1b77]*/ |