/*[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, /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 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=65f896fb13902f6d input=a9049054013a1b77]*/