17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(pairwise_new__doc__,
67db96d56Sopenharmony_ci"pairwise(iterable, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Return an iterator of overlapping pairs taken from the input iterator.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"    s -> (s0,s1), (s1,s2), (s2, s3), ...");
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_cistatic PyObject *
147db96d56Sopenharmony_cipairwise_new_impl(PyTypeObject *type, PyObject *iterable);
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_cistatic PyObject *
177db96d56Sopenharmony_cipairwise_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
187db96d56Sopenharmony_ci{
197db96d56Sopenharmony_ci    PyObject *return_value = NULL;
207db96d56Sopenharmony_ci    PyObject *iterable;
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    if ((type == &pairwise_type ||
237db96d56Sopenharmony_ci         type->tp_init == pairwise_type.tp_init) &&
247db96d56Sopenharmony_ci        !_PyArg_NoKeywords("pairwise", kwargs)) {
257db96d56Sopenharmony_ci        goto exit;
267db96d56Sopenharmony_ci    }
277db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("pairwise", PyTuple_GET_SIZE(args), 1, 1)) {
287db96d56Sopenharmony_ci        goto exit;
297db96d56Sopenharmony_ci    }
307db96d56Sopenharmony_ci    iterable = PyTuple_GET_ITEM(args, 0);
317db96d56Sopenharmony_ci    return_value = pairwise_new_impl(type, iterable);
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciexit:
347db96d56Sopenharmony_ci    return return_value;
357db96d56Sopenharmony_ci}
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_groupby__doc__,
387db96d56Sopenharmony_ci"groupby(iterable, key=None)\n"
397db96d56Sopenharmony_ci"--\n"
407db96d56Sopenharmony_ci"\n"
417db96d56Sopenharmony_ci"make an iterator that returns consecutive keys and groups from the iterable\n"
427db96d56Sopenharmony_ci"\n"
437db96d56Sopenharmony_ci"  iterable\n"
447db96d56Sopenharmony_ci"    Elements to divide into groups according to the key function.\n"
457db96d56Sopenharmony_ci"  key\n"
467db96d56Sopenharmony_ci"    A function for computing the group category for each element.\n"
477db96d56Sopenharmony_ci"    If the key function is not specified or is None, the element itself\n"
487db96d56Sopenharmony_ci"    is used for grouping.");
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_cistatic PyObject *
517db96d56Sopenharmony_ciitertools_groupby_impl(PyTypeObject *type, PyObject *it, PyObject *keyfunc);
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_cistatic PyObject *
547db96d56Sopenharmony_ciitertools_groupby(PyTypeObject *type, PyObject *args, PyObject *kwargs)
557db96d56Sopenharmony_ci{
567db96d56Sopenharmony_ci    PyObject *return_value = NULL;
577db96d56Sopenharmony_ci    static const char * const _keywords[] = {"iterable", "key", NULL};
587db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "groupby", 0};
597db96d56Sopenharmony_ci    PyObject *argsbuf[2];
607db96d56Sopenharmony_ci    PyObject * const *fastargs;
617db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
627db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
637db96d56Sopenharmony_ci    PyObject *it;
647db96d56Sopenharmony_ci    PyObject *keyfunc = Py_None;
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 2, 0, argsbuf);
677db96d56Sopenharmony_ci    if (!fastargs) {
687db96d56Sopenharmony_ci        goto exit;
697db96d56Sopenharmony_ci    }
707db96d56Sopenharmony_ci    it = fastargs[0];
717db96d56Sopenharmony_ci    if (!noptargs) {
727db96d56Sopenharmony_ci        goto skip_optional_pos;
737db96d56Sopenharmony_ci    }
747db96d56Sopenharmony_ci    keyfunc = fastargs[1];
757db96d56Sopenharmony_ciskip_optional_pos:
767db96d56Sopenharmony_ci    return_value = itertools_groupby_impl(type, it, keyfunc);
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ciexit:
797db96d56Sopenharmony_ci    return return_value;
807db96d56Sopenharmony_ci}
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_cistatic PyObject *
837db96d56Sopenharmony_ciitertools__grouper_impl(PyTypeObject *type, PyObject *parent,
847db96d56Sopenharmony_ci                        PyObject *tgtkey);
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_cistatic PyObject *
877db96d56Sopenharmony_ciitertools__grouper(PyTypeObject *type, PyObject *args, PyObject *kwargs)
887db96d56Sopenharmony_ci{
897db96d56Sopenharmony_ci    PyObject *return_value = NULL;
907db96d56Sopenharmony_ci    PyObject *parent;
917db96d56Sopenharmony_ci    PyObject *tgtkey;
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci    if ((type == &_grouper_type ||
947db96d56Sopenharmony_ci         type->tp_init == _grouper_type.tp_init) &&
957db96d56Sopenharmony_ci        !_PyArg_NoKeywords("_grouper", kwargs)) {
967db96d56Sopenharmony_ci        goto exit;
977db96d56Sopenharmony_ci    }
987db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("_grouper", PyTuple_GET_SIZE(args), 2, 2)) {
997db96d56Sopenharmony_ci        goto exit;
1007db96d56Sopenharmony_ci    }
1017db96d56Sopenharmony_ci    if (!PyObject_TypeCheck(PyTuple_GET_ITEM(args, 0), &groupby_type)) {
1027db96d56Sopenharmony_ci        _PyArg_BadArgument("_grouper", "argument 1", (&groupby_type)->tp_name, PyTuple_GET_ITEM(args, 0));
1037db96d56Sopenharmony_ci        goto exit;
1047db96d56Sopenharmony_ci    }
1057db96d56Sopenharmony_ci    parent = PyTuple_GET_ITEM(args, 0);
1067db96d56Sopenharmony_ci    tgtkey = PyTuple_GET_ITEM(args, 1);
1077db96d56Sopenharmony_ci    return_value = itertools__grouper_impl(type, parent, tgtkey);
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciexit:
1107db96d56Sopenharmony_ci    return return_value;
1117db96d56Sopenharmony_ci}
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_teedataobject__doc__,
1147db96d56Sopenharmony_ci"teedataobject(iterable, values, next, /)\n"
1157db96d56Sopenharmony_ci"--\n"
1167db96d56Sopenharmony_ci"\n"
1177db96d56Sopenharmony_ci"Data container common to multiple tee objects.");
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_cistatic PyObject *
1207db96d56Sopenharmony_ciitertools_teedataobject_impl(PyTypeObject *type, PyObject *it,
1217db96d56Sopenharmony_ci                             PyObject *values, PyObject *next);
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_cistatic PyObject *
1247db96d56Sopenharmony_ciitertools_teedataobject(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1257db96d56Sopenharmony_ci{
1267db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1277db96d56Sopenharmony_ci    PyObject *it;
1287db96d56Sopenharmony_ci    PyObject *values;
1297db96d56Sopenharmony_ci    PyObject *next;
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci    if ((type == &teedataobject_type ||
1327db96d56Sopenharmony_ci         type->tp_init == teedataobject_type.tp_init) &&
1337db96d56Sopenharmony_ci        !_PyArg_NoKeywords("teedataobject", kwargs)) {
1347db96d56Sopenharmony_ci        goto exit;
1357db96d56Sopenharmony_ci    }
1367db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("teedataobject", PyTuple_GET_SIZE(args), 3, 3)) {
1377db96d56Sopenharmony_ci        goto exit;
1387db96d56Sopenharmony_ci    }
1397db96d56Sopenharmony_ci    it = PyTuple_GET_ITEM(args, 0);
1407db96d56Sopenharmony_ci    if (!PyList_Check(PyTuple_GET_ITEM(args, 1))) {
1417db96d56Sopenharmony_ci        _PyArg_BadArgument("teedataobject", "argument 2", "list", PyTuple_GET_ITEM(args, 1));
1427db96d56Sopenharmony_ci        goto exit;
1437db96d56Sopenharmony_ci    }
1447db96d56Sopenharmony_ci    values = PyTuple_GET_ITEM(args, 1);
1457db96d56Sopenharmony_ci    next = PyTuple_GET_ITEM(args, 2);
1467db96d56Sopenharmony_ci    return_value = itertools_teedataobject_impl(type, it, values, next);
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ciexit:
1497db96d56Sopenharmony_ci    return return_value;
1507db96d56Sopenharmony_ci}
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ciPyDoc_STRVAR(itertools__tee__doc__,
1537db96d56Sopenharmony_ci"_tee(iterable, /)\n"
1547db96d56Sopenharmony_ci"--\n"
1557db96d56Sopenharmony_ci"\n"
1567db96d56Sopenharmony_ci"Iterator wrapped to make it copyable.");
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_cistatic PyObject *
1597db96d56Sopenharmony_ciitertools__tee_impl(PyTypeObject *type, PyObject *iterable);
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_cistatic PyObject *
1627db96d56Sopenharmony_ciitertools__tee(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1637db96d56Sopenharmony_ci{
1647db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1657db96d56Sopenharmony_ci    PyObject *iterable;
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci    if ((type == &tee_type ||
1687db96d56Sopenharmony_ci         type->tp_init == tee_type.tp_init) &&
1697db96d56Sopenharmony_ci        !_PyArg_NoKeywords("_tee", kwargs)) {
1707db96d56Sopenharmony_ci        goto exit;
1717db96d56Sopenharmony_ci    }
1727db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("_tee", PyTuple_GET_SIZE(args), 1, 1)) {
1737db96d56Sopenharmony_ci        goto exit;
1747db96d56Sopenharmony_ci    }
1757db96d56Sopenharmony_ci    iterable = PyTuple_GET_ITEM(args, 0);
1767db96d56Sopenharmony_ci    return_value = itertools__tee_impl(type, iterable);
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ciexit:
1797db96d56Sopenharmony_ci    return return_value;
1807db96d56Sopenharmony_ci}
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_tee__doc__,
1837db96d56Sopenharmony_ci"tee($module, iterable, n=2, /)\n"
1847db96d56Sopenharmony_ci"--\n"
1857db96d56Sopenharmony_ci"\n"
1867db96d56Sopenharmony_ci"Returns a tuple of n independent iterators.");
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci#define ITERTOOLS_TEE_METHODDEF    \
1897db96d56Sopenharmony_ci    {"tee", _PyCFunction_CAST(itertools_tee), METH_FASTCALL, itertools_tee__doc__},
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_cistatic PyObject *
1927db96d56Sopenharmony_ciitertools_tee_impl(PyObject *module, PyObject *iterable, Py_ssize_t n);
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_cistatic PyObject *
1957db96d56Sopenharmony_ciitertools_tee(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1967db96d56Sopenharmony_ci{
1977db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1987db96d56Sopenharmony_ci    PyObject *iterable;
1997db96d56Sopenharmony_ci    Py_ssize_t n = 2;
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("tee", nargs, 1, 2)) {
2027db96d56Sopenharmony_ci        goto exit;
2037db96d56Sopenharmony_ci    }
2047db96d56Sopenharmony_ci    iterable = args[0];
2057db96d56Sopenharmony_ci    if (nargs < 2) {
2067db96d56Sopenharmony_ci        goto skip_optional;
2077db96d56Sopenharmony_ci    }
2087db96d56Sopenharmony_ci    {
2097db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
2107db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[1]);
2117db96d56Sopenharmony_ci        if (iobj != NULL) {
2127db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
2137db96d56Sopenharmony_ci            Py_DECREF(iobj);
2147db96d56Sopenharmony_ci        }
2157db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
2167db96d56Sopenharmony_ci            goto exit;
2177db96d56Sopenharmony_ci        }
2187db96d56Sopenharmony_ci        n = ival;
2197db96d56Sopenharmony_ci    }
2207db96d56Sopenharmony_ciskip_optional:
2217db96d56Sopenharmony_ci    return_value = itertools_tee_impl(module, iterable, n);
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ciexit:
2247db96d56Sopenharmony_ci    return return_value;
2257db96d56Sopenharmony_ci}
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_cycle__doc__,
2287db96d56Sopenharmony_ci"cycle(iterable, /)\n"
2297db96d56Sopenharmony_ci"--\n"
2307db96d56Sopenharmony_ci"\n"
2317db96d56Sopenharmony_ci"Return elements from the iterable until it is exhausted. Then repeat the sequence indefinitely.");
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_cistatic PyObject *
2347db96d56Sopenharmony_ciitertools_cycle_impl(PyTypeObject *type, PyObject *iterable);
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_cistatic PyObject *
2377db96d56Sopenharmony_ciitertools_cycle(PyTypeObject *type, PyObject *args, PyObject *kwargs)
2387db96d56Sopenharmony_ci{
2397db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2407db96d56Sopenharmony_ci    PyObject *iterable;
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci    if ((type == &cycle_type ||
2437db96d56Sopenharmony_ci         type->tp_init == cycle_type.tp_init) &&
2447db96d56Sopenharmony_ci        !_PyArg_NoKeywords("cycle", kwargs)) {
2457db96d56Sopenharmony_ci        goto exit;
2467db96d56Sopenharmony_ci    }
2477db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("cycle", PyTuple_GET_SIZE(args), 1, 1)) {
2487db96d56Sopenharmony_ci        goto exit;
2497db96d56Sopenharmony_ci    }
2507db96d56Sopenharmony_ci    iterable = PyTuple_GET_ITEM(args, 0);
2517db96d56Sopenharmony_ci    return_value = itertools_cycle_impl(type, iterable);
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ciexit:
2547db96d56Sopenharmony_ci    return return_value;
2557db96d56Sopenharmony_ci}
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_dropwhile__doc__,
2587db96d56Sopenharmony_ci"dropwhile(predicate, iterable, /)\n"
2597db96d56Sopenharmony_ci"--\n"
2607db96d56Sopenharmony_ci"\n"
2617db96d56Sopenharmony_ci"Drop items from the iterable while predicate(item) is true.\n"
2627db96d56Sopenharmony_ci"\n"
2637db96d56Sopenharmony_ci"Afterwards, return every element until the iterable is exhausted.");
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_cistatic PyObject *
2667db96d56Sopenharmony_ciitertools_dropwhile_impl(PyTypeObject *type, PyObject *func, PyObject *seq);
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_cistatic PyObject *
2697db96d56Sopenharmony_ciitertools_dropwhile(PyTypeObject *type, PyObject *args, PyObject *kwargs)
2707db96d56Sopenharmony_ci{
2717db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2727db96d56Sopenharmony_ci    PyObject *func;
2737db96d56Sopenharmony_ci    PyObject *seq;
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci    if ((type == &dropwhile_type ||
2767db96d56Sopenharmony_ci         type->tp_init == dropwhile_type.tp_init) &&
2777db96d56Sopenharmony_ci        !_PyArg_NoKeywords("dropwhile", kwargs)) {
2787db96d56Sopenharmony_ci        goto exit;
2797db96d56Sopenharmony_ci    }
2807db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("dropwhile", PyTuple_GET_SIZE(args), 2, 2)) {
2817db96d56Sopenharmony_ci        goto exit;
2827db96d56Sopenharmony_ci    }
2837db96d56Sopenharmony_ci    func = PyTuple_GET_ITEM(args, 0);
2847db96d56Sopenharmony_ci    seq = PyTuple_GET_ITEM(args, 1);
2857db96d56Sopenharmony_ci    return_value = itertools_dropwhile_impl(type, func, seq);
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ciexit:
2887db96d56Sopenharmony_ci    return return_value;
2897db96d56Sopenharmony_ci}
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_takewhile__doc__,
2927db96d56Sopenharmony_ci"takewhile(predicate, iterable, /)\n"
2937db96d56Sopenharmony_ci"--\n"
2947db96d56Sopenharmony_ci"\n"
2957db96d56Sopenharmony_ci"Return successive entries from an iterable as long as the predicate evaluates to true for each entry.");
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_cistatic PyObject *
2987db96d56Sopenharmony_ciitertools_takewhile_impl(PyTypeObject *type, PyObject *func, PyObject *seq);
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_cistatic PyObject *
3017db96d56Sopenharmony_ciitertools_takewhile(PyTypeObject *type, PyObject *args, PyObject *kwargs)
3027db96d56Sopenharmony_ci{
3037db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3047db96d56Sopenharmony_ci    PyObject *func;
3057db96d56Sopenharmony_ci    PyObject *seq;
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci    if ((type == &takewhile_type ||
3087db96d56Sopenharmony_ci         type->tp_init == takewhile_type.tp_init) &&
3097db96d56Sopenharmony_ci        !_PyArg_NoKeywords("takewhile", kwargs)) {
3107db96d56Sopenharmony_ci        goto exit;
3117db96d56Sopenharmony_ci    }
3127db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("takewhile", PyTuple_GET_SIZE(args), 2, 2)) {
3137db96d56Sopenharmony_ci        goto exit;
3147db96d56Sopenharmony_ci    }
3157db96d56Sopenharmony_ci    func = PyTuple_GET_ITEM(args, 0);
3167db96d56Sopenharmony_ci    seq = PyTuple_GET_ITEM(args, 1);
3177db96d56Sopenharmony_ci    return_value = itertools_takewhile_impl(type, func, seq);
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ciexit:
3207db96d56Sopenharmony_ci    return return_value;
3217db96d56Sopenharmony_ci}
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_starmap__doc__,
3247db96d56Sopenharmony_ci"starmap(function, iterable, /)\n"
3257db96d56Sopenharmony_ci"--\n"
3267db96d56Sopenharmony_ci"\n"
3277db96d56Sopenharmony_ci"Return an iterator whose values are returned from the function evaluated with an argument tuple taken from the given sequence.");
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_cistatic PyObject *
3307db96d56Sopenharmony_ciitertools_starmap_impl(PyTypeObject *type, PyObject *func, PyObject *seq);
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_cistatic PyObject *
3337db96d56Sopenharmony_ciitertools_starmap(PyTypeObject *type, PyObject *args, PyObject *kwargs)
3347db96d56Sopenharmony_ci{
3357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3367db96d56Sopenharmony_ci    PyObject *func;
3377db96d56Sopenharmony_ci    PyObject *seq;
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci    if ((type == &starmap_type ||
3407db96d56Sopenharmony_ci         type->tp_init == starmap_type.tp_init) &&
3417db96d56Sopenharmony_ci        !_PyArg_NoKeywords("starmap", kwargs)) {
3427db96d56Sopenharmony_ci        goto exit;
3437db96d56Sopenharmony_ci    }
3447db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("starmap", PyTuple_GET_SIZE(args), 2, 2)) {
3457db96d56Sopenharmony_ci        goto exit;
3467db96d56Sopenharmony_ci    }
3477db96d56Sopenharmony_ci    func = PyTuple_GET_ITEM(args, 0);
3487db96d56Sopenharmony_ci    seq = PyTuple_GET_ITEM(args, 1);
3497db96d56Sopenharmony_ci    return_value = itertools_starmap_impl(type, func, seq);
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ciexit:
3527db96d56Sopenharmony_ci    return return_value;
3537db96d56Sopenharmony_ci}
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_chain_from_iterable__doc__,
3567db96d56Sopenharmony_ci"from_iterable($type, iterable, /)\n"
3577db96d56Sopenharmony_ci"--\n"
3587db96d56Sopenharmony_ci"\n"
3597db96d56Sopenharmony_ci"Alternative chain() constructor taking a single iterable argument that evaluates lazily.");
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci#define ITERTOOLS_CHAIN_FROM_ITERABLE_METHODDEF    \
3627db96d56Sopenharmony_ci    {"from_iterable", (PyCFunction)itertools_chain_from_iterable, METH_O|METH_CLASS, itertools_chain_from_iterable__doc__},
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_combinations__doc__,
3657db96d56Sopenharmony_ci"combinations(iterable, r)\n"
3667db96d56Sopenharmony_ci"--\n"
3677db96d56Sopenharmony_ci"\n"
3687db96d56Sopenharmony_ci"Return successive r-length combinations of elements in the iterable.\n"
3697db96d56Sopenharmony_ci"\n"
3707db96d56Sopenharmony_ci"combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)");
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_cistatic PyObject *
3737db96d56Sopenharmony_ciitertools_combinations_impl(PyTypeObject *type, PyObject *iterable,
3747db96d56Sopenharmony_ci                            Py_ssize_t r);
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_cistatic PyObject *
3777db96d56Sopenharmony_ciitertools_combinations(PyTypeObject *type, PyObject *args, PyObject *kwargs)
3787db96d56Sopenharmony_ci{
3797db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3807db96d56Sopenharmony_ci    static const char * const _keywords[] = {"iterable", "r", NULL};
3817db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "combinations", 0};
3827db96d56Sopenharmony_ci    PyObject *argsbuf[2];
3837db96d56Sopenharmony_ci    PyObject * const *fastargs;
3847db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
3857db96d56Sopenharmony_ci    PyObject *iterable;
3867db96d56Sopenharmony_ci    Py_ssize_t r;
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 2, 2, 0, argsbuf);
3897db96d56Sopenharmony_ci    if (!fastargs) {
3907db96d56Sopenharmony_ci        goto exit;
3917db96d56Sopenharmony_ci    }
3927db96d56Sopenharmony_ci    iterable = fastargs[0];
3937db96d56Sopenharmony_ci    {
3947db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
3957db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(fastargs[1]);
3967db96d56Sopenharmony_ci        if (iobj != NULL) {
3977db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
3987db96d56Sopenharmony_ci            Py_DECREF(iobj);
3997db96d56Sopenharmony_ci        }
4007db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
4017db96d56Sopenharmony_ci            goto exit;
4027db96d56Sopenharmony_ci        }
4037db96d56Sopenharmony_ci        r = ival;
4047db96d56Sopenharmony_ci    }
4057db96d56Sopenharmony_ci    return_value = itertools_combinations_impl(type, iterable, r);
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ciexit:
4087db96d56Sopenharmony_ci    return return_value;
4097db96d56Sopenharmony_ci}
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_combinations_with_replacement__doc__,
4127db96d56Sopenharmony_ci"combinations_with_replacement(iterable, r)\n"
4137db96d56Sopenharmony_ci"--\n"
4147db96d56Sopenharmony_ci"\n"
4157db96d56Sopenharmony_ci"Return successive r-length combinations of elements in the iterable allowing individual elements to have successive repeats.\n"
4167db96d56Sopenharmony_ci"\n"
4177db96d56Sopenharmony_ci"combinations_with_replacement(\'ABC\', 2) --> (\'A\',\'A\'), (\'A\',\'B\'), (\'A\',\'C\'), (\'B\',\'B\'), (\'B\',\'C\'), (\'C\',\'C\')");
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_cistatic PyObject *
4207db96d56Sopenharmony_ciitertools_combinations_with_replacement_impl(PyTypeObject *type,
4217db96d56Sopenharmony_ci                                             PyObject *iterable,
4227db96d56Sopenharmony_ci                                             Py_ssize_t r);
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_cistatic PyObject *
4257db96d56Sopenharmony_ciitertools_combinations_with_replacement(PyTypeObject *type, PyObject *args, PyObject *kwargs)
4267db96d56Sopenharmony_ci{
4277db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4287db96d56Sopenharmony_ci    static const char * const _keywords[] = {"iterable", "r", NULL};
4297db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "combinations_with_replacement", 0};
4307db96d56Sopenharmony_ci    PyObject *argsbuf[2];
4317db96d56Sopenharmony_ci    PyObject * const *fastargs;
4327db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
4337db96d56Sopenharmony_ci    PyObject *iterable;
4347db96d56Sopenharmony_ci    Py_ssize_t r;
4357db96d56Sopenharmony_ci
4367db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 2, 2, 0, argsbuf);
4377db96d56Sopenharmony_ci    if (!fastargs) {
4387db96d56Sopenharmony_ci        goto exit;
4397db96d56Sopenharmony_ci    }
4407db96d56Sopenharmony_ci    iterable = fastargs[0];
4417db96d56Sopenharmony_ci    {
4427db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
4437db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(fastargs[1]);
4447db96d56Sopenharmony_ci        if (iobj != NULL) {
4457db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
4467db96d56Sopenharmony_ci            Py_DECREF(iobj);
4477db96d56Sopenharmony_ci        }
4487db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
4497db96d56Sopenharmony_ci            goto exit;
4507db96d56Sopenharmony_ci        }
4517db96d56Sopenharmony_ci        r = ival;
4527db96d56Sopenharmony_ci    }
4537db96d56Sopenharmony_ci    return_value = itertools_combinations_with_replacement_impl(type, iterable, r);
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ciexit:
4567db96d56Sopenharmony_ci    return return_value;
4577db96d56Sopenharmony_ci}
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_permutations__doc__,
4607db96d56Sopenharmony_ci"permutations(iterable, r=None)\n"
4617db96d56Sopenharmony_ci"--\n"
4627db96d56Sopenharmony_ci"\n"
4637db96d56Sopenharmony_ci"Return successive r-length permutations of elements in the iterable.\n"
4647db96d56Sopenharmony_ci"\n"
4657db96d56Sopenharmony_ci"permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)");
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_cistatic PyObject *
4687db96d56Sopenharmony_ciitertools_permutations_impl(PyTypeObject *type, PyObject *iterable,
4697db96d56Sopenharmony_ci                            PyObject *robj);
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_cistatic PyObject *
4727db96d56Sopenharmony_ciitertools_permutations(PyTypeObject *type, PyObject *args, PyObject *kwargs)
4737db96d56Sopenharmony_ci{
4747db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4757db96d56Sopenharmony_ci    static const char * const _keywords[] = {"iterable", "r", NULL};
4767db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "permutations", 0};
4777db96d56Sopenharmony_ci    PyObject *argsbuf[2];
4787db96d56Sopenharmony_ci    PyObject * const *fastargs;
4797db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
4807db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
4817db96d56Sopenharmony_ci    PyObject *iterable;
4827db96d56Sopenharmony_ci    PyObject *robj = Py_None;
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 2, 0, argsbuf);
4857db96d56Sopenharmony_ci    if (!fastargs) {
4867db96d56Sopenharmony_ci        goto exit;
4877db96d56Sopenharmony_ci    }
4887db96d56Sopenharmony_ci    iterable = fastargs[0];
4897db96d56Sopenharmony_ci    if (!noptargs) {
4907db96d56Sopenharmony_ci        goto skip_optional_pos;
4917db96d56Sopenharmony_ci    }
4927db96d56Sopenharmony_ci    robj = fastargs[1];
4937db96d56Sopenharmony_ciskip_optional_pos:
4947db96d56Sopenharmony_ci    return_value = itertools_permutations_impl(type, iterable, robj);
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ciexit:
4977db96d56Sopenharmony_ci    return return_value;
4987db96d56Sopenharmony_ci}
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_accumulate__doc__,
5017db96d56Sopenharmony_ci"accumulate(iterable, func=None, *, initial=None)\n"
5027db96d56Sopenharmony_ci"--\n"
5037db96d56Sopenharmony_ci"\n"
5047db96d56Sopenharmony_ci"Return series of accumulated sums (or other binary function results).");
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_cistatic PyObject *
5077db96d56Sopenharmony_ciitertools_accumulate_impl(PyTypeObject *type, PyObject *iterable,
5087db96d56Sopenharmony_ci                          PyObject *binop, PyObject *initial);
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_cistatic PyObject *
5117db96d56Sopenharmony_ciitertools_accumulate(PyTypeObject *type, PyObject *args, PyObject *kwargs)
5127db96d56Sopenharmony_ci{
5137db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5147db96d56Sopenharmony_ci    static const char * const _keywords[] = {"iterable", "func", "initial", NULL};
5157db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "accumulate", 0};
5167db96d56Sopenharmony_ci    PyObject *argsbuf[3];
5177db96d56Sopenharmony_ci    PyObject * const *fastargs;
5187db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
5197db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
5207db96d56Sopenharmony_ci    PyObject *iterable;
5217db96d56Sopenharmony_ci    PyObject *binop = Py_None;
5227db96d56Sopenharmony_ci    PyObject *initial = Py_None;
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 2, 0, argsbuf);
5257db96d56Sopenharmony_ci    if (!fastargs) {
5267db96d56Sopenharmony_ci        goto exit;
5277db96d56Sopenharmony_ci    }
5287db96d56Sopenharmony_ci    iterable = fastargs[0];
5297db96d56Sopenharmony_ci    if (!noptargs) {
5307db96d56Sopenharmony_ci        goto skip_optional_pos;
5317db96d56Sopenharmony_ci    }
5327db96d56Sopenharmony_ci    if (fastargs[1]) {
5337db96d56Sopenharmony_ci        binop = fastargs[1];
5347db96d56Sopenharmony_ci        if (!--noptargs) {
5357db96d56Sopenharmony_ci            goto skip_optional_pos;
5367db96d56Sopenharmony_ci        }
5377db96d56Sopenharmony_ci    }
5387db96d56Sopenharmony_ciskip_optional_pos:
5397db96d56Sopenharmony_ci    if (!noptargs) {
5407db96d56Sopenharmony_ci        goto skip_optional_kwonly;
5417db96d56Sopenharmony_ci    }
5427db96d56Sopenharmony_ci    initial = fastargs[2];
5437db96d56Sopenharmony_ciskip_optional_kwonly:
5447db96d56Sopenharmony_ci    return_value = itertools_accumulate_impl(type, iterable, binop, initial);
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ciexit:
5477db96d56Sopenharmony_ci    return return_value;
5487db96d56Sopenharmony_ci}
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_compress__doc__,
5517db96d56Sopenharmony_ci"compress(data, selectors)\n"
5527db96d56Sopenharmony_ci"--\n"
5537db96d56Sopenharmony_ci"\n"
5547db96d56Sopenharmony_ci"Return data elements corresponding to true selector elements.\n"
5557db96d56Sopenharmony_ci"\n"
5567db96d56Sopenharmony_ci"Forms a shorter iterator from selected data elements using the selectors to\n"
5577db96d56Sopenharmony_ci"choose the data elements.");
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_cistatic PyObject *
5607db96d56Sopenharmony_ciitertools_compress_impl(PyTypeObject *type, PyObject *seq1, PyObject *seq2);
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_cistatic PyObject *
5637db96d56Sopenharmony_ciitertools_compress(PyTypeObject *type, PyObject *args, PyObject *kwargs)
5647db96d56Sopenharmony_ci{
5657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5667db96d56Sopenharmony_ci    static const char * const _keywords[] = {"data", "selectors", NULL};
5677db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "compress", 0};
5687db96d56Sopenharmony_ci    PyObject *argsbuf[2];
5697db96d56Sopenharmony_ci    PyObject * const *fastargs;
5707db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
5717db96d56Sopenharmony_ci    PyObject *seq1;
5727db96d56Sopenharmony_ci    PyObject *seq2;
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 2, 2, 0, argsbuf);
5757db96d56Sopenharmony_ci    if (!fastargs) {
5767db96d56Sopenharmony_ci        goto exit;
5777db96d56Sopenharmony_ci    }
5787db96d56Sopenharmony_ci    seq1 = fastargs[0];
5797db96d56Sopenharmony_ci    seq2 = fastargs[1];
5807db96d56Sopenharmony_ci    return_value = itertools_compress_impl(type, seq1, seq2);
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ciexit:
5837db96d56Sopenharmony_ci    return return_value;
5847db96d56Sopenharmony_ci}
5857db96d56Sopenharmony_ci
5867db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_filterfalse__doc__,
5877db96d56Sopenharmony_ci"filterfalse(function, iterable, /)\n"
5887db96d56Sopenharmony_ci"--\n"
5897db96d56Sopenharmony_ci"\n"
5907db96d56Sopenharmony_ci"Return those items of iterable for which function(item) is false.\n"
5917db96d56Sopenharmony_ci"\n"
5927db96d56Sopenharmony_ci"If function is None, return the items that are false.");
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_cistatic PyObject *
5957db96d56Sopenharmony_ciitertools_filterfalse_impl(PyTypeObject *type, PyObject *func, PyObject *seq);
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_cistatic PyObject *
5987db96d56Sopenharmony_ciitertools_filterfalse(PyTypeObject *type, PyObject *args, PyObject *kwargs)
5997db96d56Sopenharmony_ci{
6007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6017db96d56Sopenharmony_ci    PyObject *func;
6027db96d56Sopenharmony_ci    PyObject *seq;
6037db96d56Sopenharmony_ci
6047db96d56Sopenharmony_ci    if ((type == &filterfalse_type ||
6057db96d56Sopenharmony_ci         type->tp_init == filterfalse_type.tp_init) &&
6067db96d56Sopenharmony_ci        !_PyArg_NoKeywords("filterfalse", kwargs)) {
6077db96d56Sopenharmony_ci        goto exit;
6087db96d56Sopenharmony_ci    }
6097db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("filterfalse", PyTuple_GET_SIZE(args), 2, 2)) {
6107db96d56Sopenharmony_ci        goto exit;
6117db96d56Sopenharmony_ci    }
6127db96d56Sopenharmony_ci    func = PyTuple_GET_ITEM(args, 0);
6137db96d56Sopenharmony_ci    seq = PyTuple_GET_ITEM(args, 1);
6147db96d56Sopenharmony_ci    return_value = itertools_filterfalse_impl(type, func, seq);
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ciexit:
6177db96d56Sopenharmony_ci    return return_value;
6187db96d56Sopenharmony_ci}
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ciPyDoc_STRVAR(itertools_count__doc__,
6217db96d56Sopenharmony_ci"count(start=0, step=1)\n"
6227db96d56Sopenharmony_ci"--\n"
6237db96d56Sopenharmony_ci"\n"
6247db96d56Sopenharmony_ci"Return a count object whose .__next__() method returns consecutive values.\n"
6257db96d56Sopenharmony_ci"\n"
6267db96d56Sopenharmony_ci"Equivalent to:\n"
6277db96d56Sopenharmony_ci"    def count(firstval=0, step=1):\n"
6287db96d56Sopenharmony_ci"        x = firstval\n"
6297db96d56Sopenharmony_ci"        while 1:\n"
6307db96d56Sopenharmony_ci"            yield x\n"
6317db96d56Sopenharmony_ci"            x += step");
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_cistatic PyObject *
6347db96d56Sopenharmony_ciitertools_count_impl(PyTypeObject *type, PyObject *long_cnt,
6357db96d56Sopenharmony_ci                     PyObject *long_step);
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_cistatic PyObject *
6387db96d56Sopenharmony_ciitertools_count(PyTypeObject *type, PyObject *args, PyObject *kwargs)
6397db96d56Sopenharmony_ci{
6407db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6417db96d56Sopenharmony_ci    static const char * const _keywords[] = {"start", "step", NULL};
6427db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "count", 0};
6437db96d56Sopenharmony_ci    PyObject *argsbuf[2];
6447db96d56Sopenharmony_ci    PyObject * const *fastargs;
6457db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
6467db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
6477db96d56Sopenharmony_ci    PyObject *long_cnt = NULL;
6487db96d56Sopenharmony_ci    PyObject *long_step = NULL;
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 2, 0, argsbuf);
6517db96d56Sopenharmony_ci    if (!fastargs) {
6527db96d56Sopenharmony_ci        goto exit;
6537db96d56Sopenharmony_ci    }
6547db96d56Sopenharmony_ci    if (!noptargs) {
6557db96d56Sopenharmony_ci        goto skip_optional_pos;
6567db96d56Sopenharmony_ci    }
6577db96d56Sopenharmony_ci    if (fastargs[0]) {
6587db96d56Sopenharmony_ci        long_cnt = fastargs[0];
6597db96d56Sopenharmony_ci        if (!--noptargs) {
6607db96d56Sopenharmony_ci            goto skip_optional_pos;
6617db96d56Sopenharmony_ci        }
6627db96d56Sopenharmony_ci    }
6637db96d56Sopenharmony_ci    long_step = fastargs[1];
6647db96d56Sopenharmony_ciskip_optional_pos:
6657db96d56Sopenharmony_ci    return_value = itertools_count_impl(type, long_cnt, long_step);
6667db96d56Sopenharmony_ci
6677db96d56Sopenharmony_ciexit:
6687db96d56Sopenharmony_ci    return return_value;
6697db96d56Sopenharmony_ci}
6707db96d56Sopenharmony_ci/*[clinic end generated code: output=659251a811ff89ed input=a9049054013a1b77]*/
671