(root)/
Python-3.12.0/
Modules/
clinic/
arraymodule.c.h
       1  /*[clinic input]
       2  preserve
       3  [clinic start generated code]*/
       4  
       5  #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
       6  #  include "pycore_gc.h"            // PyGC_Head
       7  #  include "pycore_runtime.h"       // _Py_ID()
       8  #endif
       9  
      10  
      11  PyDoc_STRVAR(array_array___copy____doc__,
      12  "__copy__($self, /)\n"
      13  "--\n"
      14  "\n"
      15  "Return a copy of the array.");
      16  
      17  #define ARRAY_ARRAY___COPY___METHODDEF    \
      18      {"__copy__", (PyCFunction)array_array___copy__, METH_NOARGS, array_array___copy____doc__},
      19  
      20  static PyObject *
      21  array_array___copy___impl(arrayobject *self);
      22  
      23  static PyObject *
      24  array_array___copy__(arrayobject *self, PyObject *Py_UNUSED(ignored))
      25  {
      26      return array_array___copy___impl(self);
      27  }
      28  
      29  PyDoc_STRVAR(array_array___deepcopy____doc__,
      30  "__deepcopy__($self, unused, /)\n"
      31  "--\n"
      32  "\n"
      33  "Return a copy of the array.");
      34  
      35  #define ARRAY_ARRAY___DEEPCOPY___METHODDEF    \
      36      {"__deepcopy__", (PyCFunction)array_array___deepcopy__, METH_O, array_array___deepcopy____doc__},
      37  
      38  PyDoc_STRVAR(array_array_count__doc__,
      39  "count($self, v, /)\n"
      40  "--\n"
      41  "\n"
      42  "Return number of occurrences of v in the array.");
      43  
      44  #define ARRAY_ARRAY_COUNT_METHODDEF    \
      45      {"count", (PyCFunction)array_array_count, METH_O, array_array_count__doc__},
      46  
      47  PyDoc_STRVAR(array_array_index__doc__,
      48  "index($self, v, start=0, stop=sys.maxsize, /)\n"
      49  "--\n"
      50  "\n"
      51  "Return index of first occurrence of v in the array.\n"
      52  "\n"
      53  "Raise ValueError if the value is not present.");
      54  
      55  #define ARRAY_ARRAY_INDEX_METHODDEF    \
      56      {"index", _PyCFunction_CAST(array_array_index), METH_FASTCALL, array_array_index__doc__},
      57  
      58  static PyObject *
      59  array_array_index_impl(arrayobject *self, PyObject *v, Py_ssize_t start,
      60                         Py_ssize_t stop);
      61  
      62  static PyObject *
      63  array_array_index(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
      64  {
      65      PyObject *return_value = NULL;
      66      PyObject *v;
      67      Py_ssize_t start = 0;
      68      Py_ssize_t stop = PY_SSIZE_T_MAX;
      69  
      70      if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
      71          goto exit;
      72      }
      73      v = args[0];
      74      if (nargs < 2) {
      75          goto skip_optional;
      76      }
      77      if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
      78          goto exit;
      79      }
      80      if (nargs < 3) {
      81          goto skip_optional;
      82      }
      83      if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
      84          goto exit;
      85      }
      86  skip_optional:
      87      return_value = array_array_index_impl(self, v, start, stop);
      88  
      89  exit:
      90      return return_value;
      91  }
      92  
      93  PyDoc_STRVAR(array_array_remove__doc__,
      94  "remove($self, v, /)\n"
      95  "--\n"
      96  "\n"
      97  "Remove the first occurrence of v in the array.");
      98  
      99  #define ARRAY_ARRAY_REMOVE_METHODDEF    \
     100      {"remove", (PyCFunction)array_array_remove, METH_O, array_array_remove__doc__},
     101  
     102  PyDoc_STRVAR(array_array_pop__doc__,
     103  "pop($self, i=-1, /)\n"
     104  "--\n"
     105  "\n"
     106  "Return the i-th element and delete it from the array.\n"
     107  "\n"
     108  "i defaults to -1.");
     109  
     110  #define ARRAY_ARRAY_POP_METHODDEF    \
     111      {"pop", _PyCFunction_CAST(array_array_pop), METH_FASTCALL, array_array_pop__doc__},
     112  
     113  static PyObject *
     114  array_array_pop_impl(arrayobject *self, Py_ssize_t i);
     115  
     116  static PyObject *
     117  array_array_pop(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
     118  {
     119      PyObject *return_value = NULL;
     120      Py_ssize_t i = -1;
     121  
     122      if (!_PyArg_CheckPositional("pop", nargs, 0, 1)) {
     123          goto exit;
     124      }
     125      if (nargs < 1) {
     126          goto skip_optional;
     127      }
     128      {
     129          Py_ssize_t ival = -1;
     130          PyObject *iobj = _PyNumber_Index(args[0]);
     131          if (iobj != NULL) {
     132              ival = PyLong_AsSsize_t(iobj);
     133              Py_DECREF(iobj);
     134          }
     135          if (ival == -1 && PyErr_Occurred()) {
     136              goto exit;
     137          }
     138          i = ival;
     139      }
     140  skip_optional:
     141      return_value = array_array_pop_impl(self, i);
     142  
     143  exit:
     144      return return_value;
     145  }
     146  
     147  PyDoc_STRVAR(array_array_extend__doc__,
     148  "extend($self, bb, /)\n"
     149  "--\n"
     150  "\n"
     151  "Append items to the end of the array.");
     152  
     153  #define ARRAY_ARRAY_EXTEND_METHODDEF    \
     154      {"extend", _PyCFunction_CAST(array_array_extend), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_extend__doc__},
     155  
     156  static PyObject *
     157  array_array_extend_impl(arrayobject *self, PyTypeObject *cls, PyObject *bb);
     158  
     159  static PyObject *
     160  array_array_extend(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     161  {
     162      PyObject *return_value = NULL;
     163      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     164      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
     165      #else
     166      #  define KWTUPLE NULL
     167      #endif
     168  
     169      static const char * const _keywords[] = {"", NULL};
     170      static _PyArg_Parser _parser = {
     171          .keywords = _keywords,
     172          .fname = "extend",
     173          .kwtuple = KWTUPLE,
     174      };
     175      #undef KWTUPLE
     176      PyObject *argsbuf[1];
     177      PyObject *bb;
     178  
     179      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
     180      if (!args) {
     181          goto exit;
     182      }
     183      bb = args[0];
     184      return_value = array_array_extend_impl(self, cls, bb);
     185  
     186  exit:
     187      return return_value;
     188  }
     189  
     190  PyDoc_STRVAR(array_array_insert__doc__,
     191  "insert($self, i, v, /)\n"
     192  "--\n"
     193  "\n"
     194  "Insert a new item v into the array before position i.");
     195  
     196  #define ARRAY_ARRAY_INSERT_METHODDEF    \
     197      {"insert", _PyCFunction_CAST(array_array_insert), METH_FASTCALL, array_array_insert__doc__},
     198  
     199  static PyObject *
     200  array_array_insert_impl(arrayobject *self, Py_ssize_t i, PyObject *v);
     201  
     202  static PyObject *
     203  array_array_insert(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
     204  {
     205      PyObject *return_value = NULL;
     206      Py_ssize_t i;
     207      PyObject *v;
     208  
     209      if (!_PyArg_CheckPositional("insert", nargs, 2, 2)) {
     210          goto exit;
     211      }
     212      {
     213          Py_ssize_t ival = -1;
     214          PyObject *iobj = _PyNumber_Index(args[0]);
     215          if (iobj != NULL) {
     216              ival = PyLong_AsSsize_t(iobj);
     217              Py_DECREF(iobj);
     218          }
     219          if (ival == -1 && PyErr_Occurred()) {
     220              goto exit;
     221          }
     222          i = ival;
     223      }
     224      v = args[1];
     225      return_value = array_array_insert_impl(self, i, v);
     226  
     227  exit:
     228      return return_value;
     229  }
     230  
     231  PyDoc_STRVAR(array_array_buffer_info__doc__,
     232  "buffer_info($self, /)\n"
     233  "--\n"
     234  "\n"
     235  "Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array\'s contents.\n"
     236  "\n"
     237  "The length should be multiplied by the itemsize attribute to calculate\n"
     238  "the buffer length in bytes.");
     239  
     240  #define ARRAY_ARRAY_BUFFER_INFO_METHODDEF    \
     241      {"buffer_info", (PyCFunction)array_array_buffer_info, METH_NOARGS, array_array_buffer_info__doc__},
     242  
     243  static PyObject *
     244  array_array_buffer_info_impl(arrayobject *self);
     245  
     246  static PyObject *
     247  array_array_buffer_info(arrayobject *self, PyObject *Py_UNUSED(ignored))
     248  {
     249      return array_array_buffer_info_impl(self);
     250  }
     251  
     252  PyDoc_STRVAR(array_array_append__doc__,
     253  "append($self, v, /)\n"
     254  "--\n"
     255  "\n"
     256  "Append new value v to the end of the array.");
     257  
     258  #define ARRAY_ARRAY_APPEND_METHODDEF    \
     259      {"append", (PyCFunction)array_array_append, METH_O, array_array_append__doc__},
     260  
     261  PyDoc_STRVAR(array_array_byteswap__doc__,
     262  "byteswap($self, /)\n"
     263  "--\n"
     264  "\n"
     265  "Byteswap all items of the array.\n"
     266  "\n"
     267  "If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is\n"
     268  "raised.");
     269  
     270  #define ARRAY_ARRAY_BYTESWAP_METHODDEF    \
     271      {"byteswap", (PyCFunction)array_array_byteswap, METH_NOARGS, array_array_byteswap__doc__},
     272  
     273  static PyObject *
     274  array_array_byteswap_impl(arrayobject *self);
     275  
     276  static PyObject *
     277  array_array_byteswap(arrayobject *self, PyObject *Py_UNUSED(ignored))
     278  {
     279      return array_array_byteswap_impl(self);
     280  }
     281  
     282  PyDoc_STRVAR(array_array_reverse__doc__,
     283  "reverse($self, /)\n"
     284  "--\n"
     285  "\n"
     286  "Reverse the order of the items in the array.");
     287  
     288  #define ARRAY_ARRAY_REVERSE_METHODDEF    \
     289      {"reverse", (PyCFunction)array_array_reverse, METH_NOARGS, array_array_reverse__doc__},
     290  
     291  static PyObject *
     292  array_array_reverse_impl(arrayobject *self);
     293  
     294  static PyObject *
     295  array_array_reverse(arrayobject *self, PyObject *Py_UNUSED(ignored))
     296  {
     297      return array_array_reverse_impl(self);
     298  }
     299  
     300  PyDoc_STRVAR(array_array_fromfile__doc__,
     301  "fromfile($self, f, n, /)\n"
     302  "--\n"
     303  "\n"
     304  "Read n objects from the file object f and append them to the end of the array.");
     305  
     306  #define ARRAY_ARRAY_FROMFILE_METHODDEF    \
     307      {"fromfile", _PyCFunction_CAST(array_array_fromfile), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_fromfile__doc__},
     308  
     309  static PyObject *
     310  array_array_fromfile_impl(arrayobject *self, PyTypeObject *cls, PyObject *f,
     311                            Py_ssize_t n);
     312  
     313  static PyObject *
     314  array_array_fromfile(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     315  {
     316      PyObject *return_value = NULL;
     317      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     318      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
     319      #else
     320      #  define KWTUPLE NULL
     321      #endif
     322  
     323      static const char * const _keywords[] = {"", "", NULL};
     324      static _PyArg_Parser _parser = {
     325          .keywords = _keywords,
     326          .fname = "fromfile",
     327          .kwtuple = KWTUPLE,
     328      };
     329      #undef KWTUPLE
     330      PyObject *argsbuf[2];
     331      PyObject *f;
     332      Py_ssize_t n;
     333  
     334      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
     335      if (!args) {
     336          goto exit;
     337      }
     338      f = args[0];
     339      {
     340          Py_ssize_t ival = -1;
     341          PyObject *iobj = _PyNumber_Index(args[1]);
     342          if (iobj != NULL) {
     343              ival = PyLong_AsSsize_t(iobj);
     344              Py_DECREF(iobj);
     345          }
     346          if (ival == -1 && PyErr_Occurred()) {
     347              goto exit;
     348          }
     349          n = ival;
     350      }
     351      return_value = array_array_fromfile_impl(self, cls, f, n);
     352  
     353  exit:
     354      return return_value;
     355  }
     356  
     357  PyDoc_STRVAR(array_array_tofile__doc__,
     358  "tofile($self, f, /)\n"
     359  "--\n"
     360  "\n"
     361  "Write all items (as machine values) to the file object f.");
     362  
     363  #define ARRAY_ARRAY_TOFILE_METHODDEF    \
     364      {"tofile", _PyCFunction_CAST(array_array_tofile), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_tofile__doc__},
     365  
     366  static PyObject *
     367  array_array_tofile_impl(arrayobject *self, PyTypeObject *cls, PyObject *f);
     368  
     369  static PyObject *
     370  array_array_tofile(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     371  {
     372      PyObject *return_value = NULL;
     373      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     374      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
     375      #else
     376      #  define KWTUPLE NULL
     377      #endif
     378  
     379      static const char * const _keywords[] = {"", NULL};
     380      static _PyArg_Parser _parser = {
     381          .keywords = _keywords,
     382          .fname = "tofile",
     383          .kwtuple = KWTUPLE,
     384      };
     385      #undef KWTUPLE
     386      PyObject *argsbuf[1];
     387      PyObject *f;
     388  
     389      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
     390      if (!args) {
     391          goto exit;
     392      }
     393      f = args[0];
     394      return_value = array_array_tofile_impl(self, cls, f);
     395  
     396  exit:
     397      return return_value;
     398  }
     399  
     400  PyDoc_STRVAR(array_array_fromlist__doc__,
     401  "fromlist($self, list, /)\n"
     402  "--\n"
     403  "\n"
     404  "Append items to array from list.");
     405  
     406  #define ARRAY_ARRAY_FROMLIST_METHODDEF    \
     407      {"fromlist", (PyCFunction)array_array_fromlist, METH_O, array_array_fromlist__doc__},
     408  
     409  PyDoc_STRVAR(array_array_tolist__doc__,
     410  "tolist($self, /)\n"
     411  "--\n"
     412  "\n"
     413  "Convert array to an ordinary list with the same items.");
     414  
     415  #define ARRAY_ARRAY_TOLIST_METHODDEF    \
     416      {"tolist", (PyCFunction)array_array_tolist, METH_NOARGS, array_array_tolist__doc__},
     417  
     418  static PyObject *
     419  array_array_tolist_impl(arrayobject *self);
     420  
     421  static PyObject *
     422  array_array_tolist(arrayobject *self, PyObject *Py_UNUSED(ignored))
     423  {
     424      return array_array_tolist_impl(self);
     425  }
     426  
     427  PyDoc_STRVAR(array_array_frombytes__doc__,
     428  "frombytes($self, buffer, /)\n"
     429  "--\n"
     430  "\n"
     431  "Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method.");
     432  
     433  #define ARRAY_ARRAY_FROMBYTES_METHODDEF    \
     434      {"frombytes", (PyCFunction)array_array_frombytes, METH_O, array_array_frombytes__doc__},
     435  
     436  static PyObject *
     437  array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer);
     438  
     439  static PyObject *
     440  array_array_frombytes(arrayobject *self, PyObject *arg)
     441  {
     442      PyObject *return_value = NULL;
     443      Py_buffer buffer = {NULL, NULL};
     444  
     445      if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
     446          goto exit;
     447      }
     448      if (!PyBuffer_IsContiguous(&buffer, 'C')) {
     449          _PyArg_BadArgument("frombytes", "argument", "contiguous buffer", arg);
     450          goto exit;
     451      }
     452      return_value = array_array_frombytes_impl(self, &buffer);
     453  
     454  exit:
     455      /* Cleanup for buffer */
     456      if (buffer.obj) {
     457         PyBuffer_Release(&buffer);
     458      }
     459  
     460      return return_value;
     461  }
     462  
     463  PyDoc_STRVAR(array_array_tobytes__doc__,
     464  "tobytes($self, /)\n"
     465  "--\n"
     466  "\n"
     467  "Convert the array to an array of machine values and return the bytes representation.");
     468  
     469  #define ARRAY_ARRAY_TOBYTES_METHODDEF    \
     470      {"tobytes", (PyCFunction)array_array_tobytes, METH_NOARGS, array_array_tobytes__doc__},
     471  
     472  static PyObject *
     473  array_array_tobytes_impl(arrayobject *self);
     474  
     475  static PyObject *
     476  array_array_tobytes(arrayobject *self, PyObject *Py_UNUSED(ignored))
     477  {
     478      return array_array_tobytes_impl(self);
     479  }
     480  
     481  PyDoc_STRVAR(array_array_fromunicode__doc__,
     482  "fromunicode($self, ustr, /)\n"
     483  "--\n"
     484  "\n"
     485  "Extends this array with data from the unicode string ustr.\n"
     486  "\n"
     487  "The array must be a unicode type array; otherwise a ValueError is raised.\n"
     488  "Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of\n"
     489  "some other type.");
     490  
     491  #define ARRAY_ARRAY_FROMUNICODE_METHODDEF    \
     492      {"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__},
     493  
     494  static PyObject *
     495  array_array_fromunicode_impl(arrayobject *self, PyObject *ustr);
     496  
     497  static PyObject *
     498  array_array_fromunicode(arrayobject *self, PyObject *arg)
     499  {
     500      PyObject *return_value = NULL;
     501      PyObject *ustr;
     502  
     503      if (!PyUnicode_Check(arg)) {
     504          _PyArg_BadArgument("fromunicode", "argument", "str", arg);
     505          goto exit;
     506      }
     507      if (PyUnicode_READY(arg) == -1) {
     508          goto exit;
     509      }
     510      ustr = arg;
     511      return_value = array_array_fromunicode_impl(self, ustr);
     512  
     513  exit:
     514      return return_value;
     515  }
     516  
     517  PyDoc_STRVAR(array_array_tounicode__doc__,
     518  "tounicode($self, /)\n"
     519  "--\n"
     520  "\n"
     521  "Extends this array with data from the unicode string ustr.\n"
     522  "\n"
     523  "Convert the array to a unicode string.  The array must be a unicode type array;\n"
     524  "otherwise a ValueError is raised.  Use array.tobytes().decode() to obtain a\n"
     525  "unicode string from an array of some other type.");
     526  
     527  #define ARRAY_ARRAY_TOUNICODE_METHODDEF    \
     528      {"tounicode", (PyCFunction)array_array_tounicode, METH_NOARGS, array_array_tounicode__doc__},
     529  
     530  static PyObject *
     531  array_array_tounicode_impl(arrayobject *self);
     532  
     533  static PyObject *
     534  array_array_tounicode(arrayobject *self, PyObject *Py_UNUSED(ignored))
     535  {
     536      return array_array_tounicode_impl(self);
     537  }
     538  
     539  PyDoc_STRVAR(array_array___sizeof____doc__,
     540  "__sizeof__($self, /)\n"
     541  "--\n"
     542  "\n"
     543  "Size of the array in memory, in bytes.");
     544  
     545  #define ARRAY_ARRAY___SIZEOF___METHODDEF    \
     546      {"__sizeof__", (PyCFunction)array_array___sizeof__, METH_NOARGS, array_array___sizeof____doc__},
     547  
     548  static PyObject *
     549  array_array___sizeof___impl(arrayobject *self);
     550  
     551  static PyObject *
     552  array_array___sizeof__(arrayobject *self, PyObject *Py_UNUSED(ignored))
     553  {
     554      return array_array___sizeof___impl(self);
     555  }
     556  
     557  PyDoc_STRVAR(array__array_reconstructor__doc__,
     558  "_array_reconstructor($module, arraytype, typecode, mformat_code, items,\n"
     559  "                     /)\n"
     560  "--\n"
     561  "\n"
     562  "Internal. Used for pickling support.");
     563  
     564  #define ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF    \
     565      {"_array_reconstructor", _PyCFunction_CAST(array__array_reconstructor), METH_FASTCALL, array__array_reconstructor__doc__},
     566  
     567  static PyObject *
     568  array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype,
     569                                  int typecode,
     570                                  enum machine_format_code mformat_code,
     571                                  PyObject *items);
     572  
     573  static PyObject *
     574  array__array_reconstructor(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     575  {
     576      PyObject *return_value = NULL;
     577      PyTypeObject *arraytype;
     578      int typecode;
     579      enum machine_format_code mformat_code;
     580      PyObject *items;
     581  
     582      if (!_PyArg_CheckPositional("_array_reconstructor", nargs, 4, 4)) {
     583          goto exit;
     584      }
     585      arraytype = (PyTypeObject *)args[0];
     586      if (!PyUnicode_Check(args[1])) {
     587          _PyArg_BadArgument("_array_reconstructor", "argument 2", "a unicode character", args[1]);
     588          goto exit;
     589      }
     590      if (PyUnicode_READY(args[1])) {
     591          goto exit;
     592      }
     593      if (PyUnicode_GET_LENGTH(args[1]) != 1) {
     594          _PyArg_BadArgument("_array_reconstructor", "argument 2", "a unicode character", args[1]);
     595          goto exit;
     596      }
     597      typecode = PyUnicode_READ_CHAR(args[1], 0);
     598      mformat_code = _PyLong_AsInt(args[2]);
     599      if (mformat_code == -1 && PyErr_Occurred()) {
     600          goto exit;
     601      }
     602      items = args[3];
     603      return_value = array__array_reconstructor_impl(module, arraytype, typecode, mformat_code, items);
     604  
     605  exit:
     606      return return_value;
     607  }
     608  
     609  PyDoc_STRVAR(array_array___reduce_ex____doc__,
     610  "__reduce_ex__($self, value, /)\n"
     611  "--\n"
     612  "\n"
     613  "Return state information for pickling.");
     614  
     615  #define ARRAY_ARRAY___REDUCE_EX___METHODDEF    \
     616      {"__reduce_ex__", _PyCFunction_CAST(array_array___reduce_ex__), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array___reduce_ex____doc__},
     617  
     618  static PyObject *
     619  array_array___reduce_ex___impl(arrayobject *self, PyTypeObject *cls,
     620                                 PyObject *value);
     621  
     622  static PyObject *
     623  array_array___reduce_ex__(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     624  {
     625      PyObject *return_value = NULL;
     626      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     627      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
     628      #else
     629      #  define KWTUPLE NULL
     630      #endif
     631  
     632      static const char * const _keywords[] = {"", NULL};
     633      static _PyArg_Parser _parser = {
     634          .keywords = _keywords,
     635          .fname = "__reduce_ex__",
     636          .kwtuple = KWTUPLE,
     637      };
     638      #undef KWTUPLE
     639      PyObject *argsbuf[1];
     640      PyObject *value;
     641  
     642      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
     643      if (!args) {
     644          goto exit;
     645      }
     646      value = args[0];
     647      return_value = array_array___reduce_ex___impl(self, cls, value);
     648  
     649  exit:
     650      return return_value;
     651  }
     652  
     653  PyDoc_STRVAR(array_arrayiterator___reduce____doc__,
     654  "__reduce__($self, /)\n"
     655  "--\n"
     656  "\n"
     657  "Return state information for pickling.");
     658  
     659  #define ARRAY_ARRAYITERATOR___REDUCE___METHODDEF    \
     660      {"__reduce__", _PyCFunction_CAST(array_arrayiterator___reduce__), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_arrayiterator___reduce____doc__},
     661  
     662  static PyObject *
     663  array_arrayiterator___reduce___impl(arrayiterobject *self, PyTypeObject *cls);
     664  
     665  static PyObject *
     666  array_arrayiterator___reduce__(arrayiterobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     667  {
     668      if (nargs) {
     669          PyErr_SetString(PyExc_TypeError, "__reduce__() takes no arguments");
     670          return NULL;
     671      }
     672      return array_arrayiterator___reduce___impl(self, cls);
     673  }
     674  
     675  PyDoc_STRVAR(array_arrayiterator___setstate____doc__,
     676  "__setstate__($self, state, /)\n"
     677  "--\n"
     678  "\n"
     679  "Set state information for unpickling.");
     680  
     681  #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF    \
     682      {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
     683  /*[clinic end generated code: output=69bc1451f7bda234 input=a9049054013a1b77]*/