Coverage Report

Created: 2026-10-31 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Modules/clinic/_collectionsmodule.c.h
Line
Count
Source
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
#include "pycore_abstract.h"      // _PyNumber_Index()
10
#include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION()
11
#include "pycore_modsupport.h"    // _PyArg_CheckPositional()
12
13
PyDoc_STRVAR(deque_pop__doc__,
14
"pop($self, /)\n"
15
"--\n"
16
"\n"
17
"Remove and return the rightmost element.");
18
19
#define DEQUE_POP_METHODDEF    \
20
    {"pop", (PyCFunction)deque_pop, METH_NOARGS, deque_pop__doc__},
21
22
static PyObject *
23
deque_pop_impl(dequeobject *deque);
24
25
static PyObject *
26
deque_pop(PyObject *deque, PyObject *Py_UNUSED(ignored))
27
0
{
28
0
    PyObject *return_value = NULL;
29
30
0
    Py_BEGIN_CRITICAL_SECTION(deque);
31
0
    return_value = deque_pop_impl((dequeobject *)deque);
32
0
    Py_END_CRITICAL_SECTION();
33
34
0
    return return_value;
35
0
}
36
37
PyDoc_STRVAR(deque_popleft__doc__,
38
"popleft($self, /)\n"
39
"--\n"
40
"\n"
41
"Remove and return the leftmost element.");
42
43
#define DEQUE_POPLEFT_METHODDEF    \
44
    {"popleft", (PyCFunction)deque_popleft, METH_NOARGS, deque_popleft__doc__},
45
46
static PyObject *
47
deque_popleft_impl(dequeobject *deque);
48
49
static PyObject *
50
deque_popleft(PyObject *deque, PyObject *Py_UNUSED(ignored))
51
43.1M
{
52
43.1M
    PyObject *return_value = NULL;
53
54
43.1M
    Py_BEGIN_CRITICAL_SECTION(deque);
55
43.1M
    return_value = deque_popleft_impl((dequeobject *)deque);
56
43.1M
    Py_END_CRITICAL_SECTION();
57
58
43.1M
    return return_value;
59
43.1M
}
60
61
PyDoc_STRVAR(deque_append__doc__,
62
"append($self, item, /)\n"
63
"--\n"
64
"\n"
65
"Add an element to the right side of the deque.");
66
67
#define DEQUE_APPEND_METHODDEF    \
68
    {"append", (PyCFunction)deque_append, METH_O, deque_append__doc__},
69
70
static PyObject *
71
deque_append_impl(dequeobject *deque, PyObject *item);
72
73
static PyObject *
74
deque_append(PyObject *deque, PyObject *item)
75
1.98M
{
76
1.98M
    PyObject *return_value = NULL;
77
78
1.98M
    Py_BEGIN_CRITICAL_SECTION(deque);
79
1.98M
    return_value = deque_append_impl((dequeobject *)deque, item);
80
1.98M
    Py_END_CRITICAL_SECTION();
81
82
1.98M
    return return_value;
83
1.98M
}
84
85
PyDoc_STRVAR(deque_appendleft__doc__,
86
"appendleft($self, item, /)\n"
87
"--\n"
88
"\n"
89
"Add an element to the left side of the deque.");
90
91
#define DEQUE_APPENDLEFT_METHODDEF    \
92
    {"appendleft", (PyCFunction)deque_appendleft, METH_O, deque_appendleft__doc__},
93
94
static PyObject *
95
deque_appendleft_impl(dequeobject *deque, PyObject *item);
96
97
static PyObject *
98
deque_appendleft(PyObject *deque, PyObject *item)
99
22.2M
{
100
22.2M
    PyObject *return_value = NULL;
101
102
22.2M
    Py_BEGIN_CRITICAL_SECTION(deque);
103
22.2M
    return_value = deque_appendleft_impl((dequeobject *)deque, item);
104
22.2M
    Py_END_CRITICAL_SECTION();
105
106
22.2M
    return return_value;
107
22.2M
}
108
109
PyDoc_STRVAR(deque_extend__doc__,
110
"extend($self, iterable, /)\n"
111
"--\n"
112
"\n"
113
"Extend the right side of the deque with elements from the iterable.");
114
115
#define DEQUE_EXTEND_METHODDEF    \
116
    {"extend", (PyCFunction)deque_extend, METH_O, deque_extend__doc__},
117
118
static PyObject *
119
deque_extend_impl(dequeobject *deque, PyObject *iterable);
120
121
static PyObject *
122
deque_extend(PyObject *deque, PyObject *iterable)
123
39.7k
{
124
39.7k
    PyObject *return_value = NULL;
125
126
39.7k
    Py_BEGIN_CRITICAL_SECTION(deque);
127
39.7k
    return_value = deque_extend_impl((dequeobject *)deque, iterable);
128
39.7k
    Py_END_CRITICAL_SECTION();
129
130
39.7k
    return return_value;
131
39.7k
}
132
133
PyDoc_STRVAR(deque_extendleft__doc__,
134
"extendleft($self, iterable, /)\n"
135
"--\n"
136
"\n"
137
"Extend the left side of the deque with elements from the iterable.");
138
139
#define DEQUE_EXTENDLEFT_METHODDEF    \
140
    {"extendleft", (PyCFunction)deque_extendleft, METH_O, deque_extendleft__doc__},
141
142
static PyObject *
143
deque_extendleft_impl(dequeobject *deque, PyObject *iterable);
144
145
static PyObject *
146
deque_extendleft(PyObject *deque, PyObject *iterable)
147
0
{
148
0
    PyObject *return_value = NULL;
149
150
0
    Py_BEGIN_CRITICAL_SECTION(deque);
151
0
    return_value = deque_extendleft_impl((dequeobject *)deque, iterable);
152
0
    Py_END_CRITICAL_SECTION();
153
154
0
    return return_value;
155
0
}
156
157
PyDoc_STRVAR(deque_copy__doc__,
158
"copy($self, /)\n"
159
"--\n"
160
"\n"
161
"Return a shallow copy of a deque.");
162
163
#define DEQUE_COPY_METHODDEF    \
164
    {"copy", (PyCFunction)deque_copy, METH_NOARGS, deque_copy__doc__},
165
166
static PyObject *
167
deque_copy_impl(dequeobject *deque);
168
169
static PyObject *
170
deque_copy(PyObject *deque, PyObject *Py_UNUSED(ignored))
171
0
{
172
0
    PyObject *return_value = NULL;
173
174
0
    Py_BEGIN_CRITICAL_SECTION(deque);
175
0
    return_value = deque_copy_impl((dequeobject *)deque);
176
0
    Py_END_CRITICAL_SECTION();
177
178
0
    return return_value;
179
0
}
180
181
PyDoc_STRVAR(deque___copy____doc__,
182
"__copy__($self, /)\n"
183
"--\n"
184
"\n"
185
"Return a shallow copy of a deque.");
186
187
#define DEQUE___COPY___METHODDEF    \
188
    {"__copy__", (PyCFunction)deque___copy__, METH_NOARGS, deque___copy____doc__},
189
190
static PyObject *
191
deque___copy___impl(dequeobject *deque);
192
193
static PyObject *
194
deque___copy__(PyObject *deque, PyObject *Py_UNUSED(ignored))
195
0
{
196
0
    PyObject *return_value = NULL;
197
198
0
    Py_BEGIN_CRITICAL_SECTION(deque);
199
0
    return_value = deque___copy___impl((dequeobject *)deque);
200
0
    Py_END_CRITICAL_SECTION();
201
202
0
    return return_value;
203
0
}
204
205
static PyObject *
206
deque_concat_impl(dequeobject *deque, PyObject *other);
207
208
static PyObject *
209
deque_concat(PyObject *deque, PyObject *other)
210
0
{
211
0
    PyObject *return_value = NULL;
212
213
0
    Py_BEGIN_CRITICAL_SECTION(deque);
214
0
    return_value = deque_concat_impl((dequeobject *)deque, other);
215
0
    Py_END_CRITICAL_SECTION();
216
217
0
    return return_value;
218
0
}
219
220
PyDoc_STRVAR(deque_clearmethod__doc__,
221
"clear($self, /)\n"
222
"--\n"
223
"\n"
224
"Remove all elements from the deque.");
225
226
#define DEQUE_CLEARMETHOD_METHODDEF    \
227
    {"clear", (PyCFunction)deque_clearmethod, METH_NOARGS, deque_clearmethod__doc__},
228
229
static PyObject *
230
deque_clearmethod_impl(dequeobject *deque);
231
232
static PyObject *
233
deque_clearmethod(PyObject *deque, PyObject *Py_UNUSED(ignored))
234
0
{
235
0
    PyObject *return_value = NULL;
236
237
0
    Py_BEGIN_CRITICAL_SECTION(deque);
238
0
    return_value = deque_clearmethod_impl((dequeobject *)deque);
239
0
    Py_END_CRITICAL_SECTION();
240
241
0
    return return_value;
242
0
}
243
244
static PyObject *
245
deque_inplace_repeat_impl(dequeobject *deque, Py_ssize_t n);
246
247
static PyObject *
248
deque_inplace_repeat(PyObject *deque, Py_ssize_t n)
249
0
{
250
0
    PyObject *return_value = NULL;
251
252
0
    Py_BEGIN_CRITICAL_SECTION(deque);
253
0
    return_value = deque_inplace_repeat_impl((dequeobject *)deque, n);
254
0
    Py_END_CRITICAL_SECTION();
255
256
0
    return return_value;
257
0
}
258
259
PyDoc_STRVAR(deque_rotate__doc__,
260
"rotate($self, n=1, /)\n"
261
"--\n"
262
"\n"
263
"Rotate the deque n steps to the right.  If n is negative, rotates left.");
264
265
#define DEQUE_ROTATE_METHODDEF    \
266
    {"rotate", _PyCFunction_CAST(deque_rotate), METH_FASTCALL, deque_rotate__doc__},
267
268
static PyObject *
269
deque_rotate_impl(dequeobject *deque, Py_ssize_t n);
270
271
static PyObject *
272
deque_rotate(PyObject *deque, PyObject *const *args, Py_ssize_t nargs)
273
0
{
274
0
    PyObject *return_value = NULL;
275
0
    Py_ssize_t n = 1;
276
277
0
    if (!_PyArg_CheckPositional("rotate", nargs, 0, 1)) {
278
0
        goto exit;
279
0
    }
280
0
    if (nargs < 1) {
281
0
        goto skip_optional;
282
0
    }
283
0
    {
284
0
        Py_ssize_t ival = -1;
285
0
        PyObject *iobj = _PyNumber_Index(args[0]);
286
0
        if (iobj != NULL) {
287
0
            ival = PyLong_AsSsize_t(iobj);
288
0
            Py_DECREF(iobj);
289
0
        }
290
0
        if (ival == -1 && PyErr_Occurred()) {
291
0
            goto exit;
292
0
        }
293
0
        n = ival;
294
0
    }
295
0
skip_optional:
296
0
    Py_BEGIN_CRITICAL_SECTION(deque);
297
0
    return_value = deque_rotate_impl((dequeobject *)deque, n);
298
0
    Py_END_CRITICAL_SECTION();
299
300
0
exit:
301
0
    return return_value;
302
0
}
303
304
PyDoc_STRVAR(deque_reverse__doc__,
305
"reverse($self, /)\n"
306
"--\n"
307
"\n"
308
"Reverse *IN PLACE*.");
309
310
#define DEQUE_REVERSE_METHODDEF    \
311
    {"reverse", (PyCFunction)deque_reverse, METH_NOARGS, deque_reverse__doc__},
312
313
static PyObject *
314
deque_reverse_impl(dequeobject *deque);
315
316
static PyObject *
317
deque_reverse(PyObject *deque, PyObject *Py_UNUSED(ignored))
318
0
{
319
0
    PyObject *return_value = NULL;
320
321
0
    Py_BEGIN_CRITICAL_SECTION(deque);
322
0
    return_value = deque_reverse_impl((dequeobject *)deque);
323
0
    Py_END_CRITICAL_SECTION();
324
325
0
    return return_value;
326
0
}
327
328
PyDoc_STRVAR(deque_count__doc__,
329
"count($self, value, /)\n"
330
"--\n"
331
"\n"
332
"Return number of occurrences of value.");
333
334
#define DEQUE_COUNT_METHODDEF    \
335
    {"count", (PyCFunction)deque_count, METH_O, deque_count__doc__},
336
337
static PyObject *
338
deque_count_impl(dequeobject *deque, PyObject *v);
339
340
static PyObject *
341
deque_count(PyObject *deque, PyObject *v)
342
0
{
343
0
    PyObject *return_value = NULL;
344
345
0
    Py_BEGIN_CRITICAL_SECTION(deque);
346
0
    return_value = deque_count_impl((dequeobject *)deque, v);
347
0
    Py_END_CRITICAL_SECTION();
348
349
0
    return return_value;
350
0
}
351
352
static int
353
deque_contains_impl(dequeobject *deque, PyObject *v);
354
355
static int
356
deque_contains(PyObject *deque, PyObject *v)
357
0
{
358
0
    int return_value = -1;
359
360
0
    Py_BEGIN_CRITICAL_SECTION(deque);
361
0
    return_value = deque_contains_impl((dequeobject *)deque, v);
362
0
    Py_END_CRITICAL_SECTION();
363
364
0
    return return_value;
365
0
}
366
367
PyDoc_STRVAR(deque_index__doc__,
368
"index($self, value, [start, [stop]])\n"
369
"--\n"
370
"\n"
371
"Return first index of value.\n"
372
"\n"
373
"Raises ValueError if the value is not present.");
374
375
#define DEQUE_INDEX_METHODDEF    \
376
    {"index", _PyCFunction_CAST(deque_index), METH_FASTCALL, deque_index__doc__},
377
378
static PyObject *
379
deque_index_impl(dequeobject *deque, PyObject *v, Py_ssize_t start,
380
                 Py_ssize_t stop);
381
382
static PyObject *
383
deque_index(PyObject *deque, PyObject *const *args, Py_ssize_t nargs)
384
0
{
385
0
    PyObject *return_value = NULL;
386
0
    PyObject *v;
387
0
    Py_ssize_t start = 0;
388
0
    Py_ssize_t stop = PY_SSIZE_T_MAX;
389
390
0
    if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
391
0
        goto exit;
392
0
    }
393
0
    v = args[0];
394
0
    if (nargs < 2) {
395
0
        goto skip_optional;
396
0
    }
397
0
    if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
398
0
        goto exit;
399
0
    }
400
0
    if (nargs < 3) {
401
0
        goto skip_optional;
402
0
    }
403
0
    if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
404
0
        goto exit;
405
0
    }
406
0
skip_optional:
407
0
    Py_BEGIN_CRITICAL_SECTION(deque);
408
0
    return_value = deque_index_impl((dequeobject *)deque, v, start, stop);
409
0
    Py_END_CRITICAL_SECTION();
410
411
0
exit:
412
0
    return return_value;
413
0
}
414
415
PyDoc_STRVAR(deque_insert__doc__,
416
"insert($self, index, value, /)\n"
417
"--\n"
418
"\n"
419
"Insert value before index.");
420
421
#define DEQUE_INSERT_METHODDEF    \
422
    {"insert", _PyCFunction_CAST(deque_insert), METH_FASTCALL, deque_insert__doc__},
423
424
static PyObject *
425
deque_insert_impl(dequeobject *deque, Py_ssize_t index, PyObject *value);
426
427
static PyObject *
428
deque_insert(PyObject *deque, PyObject *const *args, Py_ssize_t nargs)
429
0
{
430
0
    PyObject *return_value = NULL;
431
0
    Py_ssize_t index;
432
0
    PyObject *value;
433
434
0
    if (!_PyArg_CheckPositional("insert", nargs, 2, 2)) {
435
0
        goto exit;
436
0
    }
437
0
    {
438
0
        Py_ssize_t ival = -1;
439
0
        PyObject *iobj = _PyNumber_Index(args[0]);
440
0
        if (iobj != NULL) {
441
0
            ival = PyLong_AsSsize_t(iobj);
442
0
            Py_DECREF(iobj);
443
0
        }
444
0
        if (ival == -1 && PyErr_Occurred()) {
445
0
            goto exit;
446
0
        }
447
0
        index = ival;
448
0
    }
449
0
    value = args[1];
450
0
    Py_BEGIN_CRITICAL_SECTION(deque);
451
0
    return_value = deque_insert_impl((dequeobject *)deque, index, value);
452
0
    Py_END_CRITICAL_SECTION();
453
454
0
exit:
455
0
    return return_value;
456
0
}
457
458
static PyObject *
459
deque_item_impl(dequeobject *deque, Py_ssize_t i);
460
461
static PyObject *
462
deque_item(PyObject *deque, Py_ssize_t i)
463
0
{
464
0
    PyObject *return_value = NULL;
465
466
0
    Py_BEGIN_CRITICAL_SECTION(deque);
467
0
    return_value = deque_item_impl((dequeobject *)deque, i);
468
0
    Py_END_CRITICAL_SECTION();
469
470
0
    return return_value;
471
0
}
472
473
PyDoc_STRVAR(deque_remove__doc__,
474
"remove($self, value, /)\n"
475
"--\n"
476
"\n"
477
"Remove first occurrence of value.");
478
479
#define DEQUE_REMOVE_METHODDEF    \
480
    {"remove", (PyCFunction)deque_remove, METH_O, deque_remove__doc__},
481
482
static PyObject *
483
deque_remove_impl(dequeobject *deque, PyObject *value);
484
485
static PyObject *
486
deque_remove(PyObject *deque, PyObject *value)
487
0
{
488
0
    PyObject *return_value = NULL;
489
490
0
    Py_BEGIN_CRITICAL_SECTION(deque);
491
0
    return_value = deque_remove_impl((dequeobject *)deque, value);
492
0
    Py_END_CRITICAL_SECTION();
493
494
0
    return return_value;
495
0
}
496
497
static int
498
deque_ass_item_impl(dequeobject *deque, Py_ssize_t i, PyObject *v);
499
500
static int
501
deque_ass_item(PyObject *deque, Py_ssize_t i, PyObject *v)
502
0
{
503
0
    int return_value = -1;
504
505
0
    Py_BEGIN_CRITICAL_SECTION(deque);
506
0
    return_value = deque_ass_item_impl((dequeobject *)deque, i, v);
507
0
    Py_END_CRITICAL_SECTION();
508
509
0
    return return_value;
510
0
}
511
512
PyDoc_STRVAR(deque___reduce____doc__,
513
"__reduce__($self, /)\n"
514
"--\n"
515
"\n"
516
"Return state information for pickling.");
517
518
#define DEQUE___REDUCE___METHODDEF    \
519
    {"__reduce__", (PyCFunction)deque___reduce__, METH_NOARGS, deque___reduce____doc__},
520
521
static PyObject *
522
deque___reduce___impl(dequeobject *deque);
523
524
static PyObject *
525
deque___reduce__(PyObject *deque, PyObject *Py_UNUSED(ignored))
526
0
{
527
0
    return deque___reduce___impl((dequeobject *)deque);
528
0
}
529
530
PyDoc_STRVAR(deque_init__doc__,
531
"deque([iterable[, maxlen]])\n"
532
"--\n"
533
"\n"
534
"A list-like sequence optimized for data accesses near its endpoints.");
535
536
static int
537
deque_init_impl(dequeobject *deque, PyObject *iterable, PyObject *maxlenobj);
538
539
static int
540
deque_init(PyObject *deque, PyObject *args, PyObject *kwargs)
541
30.3k
{
542
30.3k
    int return_value = -1;
543
30.3k
    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
544
545
30.3k
    #define NUM_KEYWORDS 2
546
30.3k
    static struct {
547
30.3k
        PyGC_Head _this_is_not_used;
548
30.3k
        PyObject_VAR_HEAD
549
30.3k
        Py_hash_t ob_hash;
550
30.3k
        PyObject *ob_item[NUM_KEYWORDS];
551
30.3k
    } _kwtuple = {
552
30.3k
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
553
30.3k
        .ob_hash = -1,
554
30.3k
        .ob_item = { &_Py_ID(iterable), &_Py_ID(maxlen), },
555
30.3k
    };
556
30.3k
    #undef NUM_KEYWORDS
557
30.3k
    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
558
559
    #else  // !Py_BUILD_CORE
560
    #  define KWTUPLE NULL
561
    #endif  // !Py_BUILD_CORE
562
563
30.3k
    static const char * const _keywords[] = {"iterable", "maxlen", NULL};
564
30.3k
    static _PyArg_Parser _parser = {
565
30.3k
        .keywords = _keywords,
566
30.3k
        .fname = "deque",
567
30.3k
        .kwtuple = KWTUPLE,
568
30.3k
    };
569
30.3k
    #undef KWTUPLE
570
30.3k
    PyObject *argsbuf[2];
571
30.3k
    PyObject * const *fastargs;
572
30.3k
    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
573
30.3k
    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
574
30.3k
    PyObject *iterable = NULL;
575
30.3k
    PyObject *maxlenobj = NULL;
576
577
30.3k
    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
578
30.3k
            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
579
30.3k
    if (!fastargs) {
580
0
        goto exit;
581
0
    }
582
30.3k
    if (!noptargs) {
583
30.3k
        goto skip_optional_pos;
584
30.3k
    }
585
8
    if (fastargs[0]) {
586
8
        iterable = fastargs[0];
587
8
        if (!--noptargs) {
588
8
            goto skip_optional_pos;
589
8
        }
590
8
    }
591
0
    maxlenobj = fastargs[1];
592
30.3k
skip_optional_pos:
593
30.3k
    Py_BEGIN_CRITICAL_SECTION(deque);
594
30.3k
    return_value = deque_init_impl((dequeobject *)deque, iterable, maxlenobj);
595
30.3k
    Py_END_CRITICAL_SECTION();
596
597
30.3k
exit:
598
30.3k
    return return_value;
599
30.3k
}
600
601
PyDoc_STRVAR(deque___sizeof____doc__,
602
"__sizeof__($self, /)\n"
603
"--\n"
604
"\n"
605
"Return the size of the deque in memory, in bytes.");
606
607
#define DEQUE___SIZEOF___METHODDEF    \
608
    {"__sizeof__", (PyCFunction)deque___sizeof__, METH_NOARGS, deque___sizeof____doc__},
609
610
static PyObject *
611
deque___sizeof___impl(dequeobject *deque);
612
613
static PyObject *
614
deque___sizeof__(PyObject *deque, PyObject *Py_UNUSED(ignored))
615
0
{
616
0
    PyObject *return_value = NULL;
617
618
0
    Py_BEGIN_CRITICAL_SECTION(deque);
619
0
    return_value = deque___sizeof___impl((dequeobject *)deque);
620
0
    Py_END_CRITICAL_SECTION();
621
622
0
    return return_value;
623
0
}
624
625
PyDoc_STRVAR(deque___reversed____doc__,
626
"__reversed__($self, /)\n"
627
"--\n"
628
"\n"
629
"Return a reverse iterator over the deque.");
630
631
#define DEQUE___REVERSED___METHODDEF    \
632
    {"__reversed__", (PyCFunction)deque___reversed__, METH_NOARGS, deque___reversed____doc__},
633
634
static PyObject *
635
deque___reversed___impl(dequeobject *deque);
636
637
static PyObject *
638
deque___reversed__(PyObject *deque, PyObject *Py_UNUSED(ignored))
639
0
{
640
0
    return deque___reversed___impl((dequeobject *)deque);
641
0
}
642
643
PyDoc_STRVAR(_collections__count_elements__doc__,
644
"_count_elements($module, mapping, iterable, /)\n"
645
"--\n"
646
"\n"
647
"Count elements in the iterable, updating the mapping");
648
649
#define _COLLECTIONS__COUNT_ELEMENTS_METHODDEF    \
650
    {"_count_elements", _PyCFunction_CAST(_collections__count_elements), METH_FASTCALL, _collections__count_elements__doc__},
651
652
static PyObject *
653
_collections__count_elements_impl(PyObject *module, PyObject *mapping,
654
                                  PyObject *iterable);
655
656
static PyObject *
657
_collections__count_elements(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
658
0
{
659
0
    PyObject *return_value = NULL;
660
0
    PyObject *mapping;
661
0
    PyObject *iterable;
662
663
0
    if (!_PyArg_CheckPositional("_count_elements", nargs, 2, 2)) {
664
0
        goto exit;
665
0
    }
666
0
    mapping = args[0];
667
0
    iterable = args[1];
668
0
    return_value = _collections__count_elements_impl(module, mapping, iterable);
669
670
0
exit:
671
0
    return return_value;
672
0
}
673
674
static PyObject *
675
tuplegetter_new_impl(PyTypeObject *type, Py_ssize_t index, PyObject *doc);
676
677
static PyObject *
678
tuplegetter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
679
738
{
680
738
    PyObject *return_value = NULL;
681
738
    PyTypeObject *base_tp = clinic_state()->tuplegetter_type;
682
738
    Py_ssize_t index;
683
738
    PyObject *doc;
684
685
738
    if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
686
738
        !_PyArg_NoKeywords("_tuplegetter", kwargs)) {
687
0
        goto exit;
688
0
    }
689
738
    if (!_PyArg_CheckPositional("_tuplegetter", PyTuple_GET_SIZE(args), 2, 2)) {
690
0
        goto exit;
691
0
    }
692
738
    {
693
738
        Py_ssize_t ival = -1;
694
738
        PyObject *iobj = _PyNumber_Index(PyTuple_GET_ITEM(args, 0));
695
738
        if (iobj != NULL) {
696
738
            ival = PyLong_AsSsize_t(iobj);
697
738
            Py_DECREF(iobj);
698
738
        }
699
738
        if (ival == -1 && PyErr_Occurred()) {
700
0
            goto exit;
701
0
        }
702
738
        index = ival;
703
738
    }
704
738
    doc = PyTuple_GET_ITEM(args, 1);
705
738
    return_value = tuplegetter_new_impl(type, index, doc);
706
707
738
exit:
708
738
    return return_value;
709
738
}
710
/*[clinic end generated code: output=de400069cf6f11a4 input=a9049054013a1b77]*/