Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : PyDoc_STRVAR(_bisect_bisect_right__doc__,
6 : : "bisect_right($module, /, a, x, lo=0, hi=None, *, key=None)\n"
7 : : "--\n"
8 : : "\n"
9 : : "Return the index where to insert item x in list a, assuming a is sorted.\n"
10 : : "\n"
11 : : "The return value i is such that all e in a[:i] have e <= x, and all e in\n"
12 : : "a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will\n"
13 : : "insert just after the rightmost x already there.\n"
14 : : "\n"
15 : : "Optional args lo (default 0) and hi (default len(a)) bound the\n"
16 : : "slice of a to be searched.");
17 : :
18 : : #define _BISECT_BISECT_RIGHT_METHODDEF \
19 : : {"bisect_right", _PyCFunction_CAST(_bisect_bisect_right), METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_right__doc__},
20 : :
21 : : static Py_ssize_t
22 : : _bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x,
23 : : Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
24 : :
25 : : static PyObject *
26 : 111651 : _bisect_bisect_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
27 : : {
28 : 111651 : PyObject *return_value = NULL;
29 : : static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
30 : : static _PyArg_Parser _parser = {NULL, _keywords, "bisect_right", 0};
31 : : PyObject *argsbuf[5];
32 [ + + ]: 111651 : Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
33 : : PyObject *a;
34 : : PyObject *x;
35 : 111651 : Py_ssize_t lo = 0;
36 : 111651 : Py_ssize_t hi = -1;
37 : 111651 : PyObject *key = Py_None;
38 : : Py_ssize_t _return_value;
39 : :
40 [ + + + + : 111651 : args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+ - - + ]
41 [ + + ]: 111651 : if (!args) {
42 : 1 : goto exit;
43 : : }
44 : 111650 : a = args[0];
45 : 111650 : x = args[1];
46 [ + + ]: 111650 : if (!noptargs) {
47 : 60671 : goto skip_optional_pos;
48 : : }
49 [ + + ]: 50979 : if (args[2]) {
50 : : {
51 : 50959 : Py_ssize_t ival = -1;
52 : 50959 : PyObject *iobj = _PyNumber_Index(args[2]);
53 [ + - ]: 50959 : if (iobj != NULL) {
54 : 50959 : ival = PyLong_AsSsize_t(iobj);
55 : 50959 : Py_DECREF(iobj);
56 : : }
57 [ + + - + ]: 50959 : if (ival == -1 && PyErr_Occurred()) {
58 : 0 : goto exit;
59 : : }
60 : 50959 : lo = ival;
61 : : }
62 [ + + ]: 50959 : if (!--noptargs) {
63 : 66 : goto skip_optional_pos;
64 : : }
65 : : }
66 [ + + ]: 50913 : if (args[3]) {
67 [ - + ]: 50893 : if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
68 : 0 : goto exit;
69 : : }
70 [ - + ]: 50893 : if (!--noptargs) {
71 : 50893 : goto skip_optional_pos;
72 : : }
73 : : }
74 : 20 : skip_optional_pos:
75 [ + + ]: 111650 : if (!noptargs) {
76 : 111630 : goto skip_optional_kwonly;
77 : : }
78 : 20 : key = args[4];
79 : 111650 : skip_optional_kwonly:
80 : 111650 : _return_value = _bisect_bisect_right_impl(module, a, x, lo, hi, key);
81 [ + + + - ]: 111650 : if ((_return_value == -1) && PyErr_Occurred()) {
82 : 5 : goto exit;
83 : : }
84 : 111645 : return_value = PyLong_FromSsize_t(_return_value);
85 : :
86 : 111651 : exit:
87 : 111651 : return return_value;
88 : : }
89 : :
90 : : PyDoc_STRVAR(_bisect_insort_right__doc__,
91 : : "insort_right($module, /, a, x, lo=0, hi=None, *, key=None)\n"
92 : : "--\n"
93 : : "\n"
94 : : "Insert item x in list a, and keep it sorted assuming a is sorted.\n"
95 : : "\n"
96 : : "If x is already in a, insert it to the right of the rightmost x.\n"
97 : : "\n"
98 : : "Optional args lo (default 0) and hi (default len(a)) bound the\n"
99 : : "slice of a to be searched.");
100 : :
101 : : #define _BISECT_INSORT_RIGHT_METHODDEF \
102 : : {"insort_right", _PyCFunction_CAST(_bisect_insort_right), METH_FASTCALL|METH_KEYWORDS, _bisect_insort_right__doc__},
103 : :
104 : : static PyObject *
105 : : _bisect_insort_right_impl(PyObject *module, PyObject *a, PyObject *x,
106 : : Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
107 : :
108 : : static PyObject *
109 : 68518 : _bisect_insort_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
110 : : {
111 : 68518 : PyObject *return_value = NULL;
112 : : static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
113 : : static _PyArg_Parser _parser = {NULL, _keywords, "insort_right", 0};
114 : : PyObject *argsbuf[5];
115 [ + + ]: 68518 : Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
116 : : PyObject *a;
117 : : PyObject *x;
118 : 68518 : Py_ssize_t lo = 0;
119 : 68518 : Py_ssize_t hi = -1;
120 : 68518 : PyObject *key = Py_None;
121 : :
122 [ + + + + : 68518 : args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+ - - + ]
123 [ + + ]: 68518 : if (!args) {
124 : 1 : goto exit;
125 : : }
126 : 68517 : a = args[0];
127 : 68517 : x = args[1];
128 [ + + ]: 68517 : if (!noptargs) {
129 : 68471 : goto skip_optional_pos;
130 : : }
131 [ + + ]: 46 : if (args[2]) {
132 : : {
133 : 4 : Py_ssize_t ival = -1;
134 : 4 : PyObject *iobj = _PyNumber_Index(args[2]);
135 [ + - ]: 4 : if (iobj != NULL) {
136 : 4 : ival = PyLong_AsSsize_t(iobj);
137 : 4 : Py_DECREF(iobj);
138 : : }
139 [ + + - + ]: 4 : if (ival == -1 && PyErr_Occurred()) {
140 : 0 : goto exit;
141 : : }
142 : 4 : lo = ival;
143 : : }
144 [ - + ]: 4 : if (!--noptargs) {
145 : 0 : goto skip_optional_pos;
146 : : }
147 : : }
148 [ + + ]: 46 : if (args[3]) {
149 [ - + ]: 4 : if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
150 : 0 : goto exit;
151 : : }
152 [ - + ]: 4 : if (!--noptargs) {
153 : 4 : goto skip_optional_pos;
154 : : }
155 : : }
156 : 42 : skip_optional_pos:
157 [ + + ]: 68517 : if (!noptargs) {
158 : 68475 : goto skip_optional_kwonly;
159 : : }
160 : 42 : key = args[4];
161 : 68517 : skip_optional_kwonly:
162 : 68517 : return_value = _bisect_insort_right_impl(module, a, x, lo, hi, key);
163 : :
164 : 68518 : exit:
165 : 68518 : return return_value;
166 : : }
167 : :
168 : : PyDoc_STRVAR(_bisect_bisect_left__doc__,
169 : : "bisect_left($module, /, a, x, lo=0, hi=None, *, key=None)\n"
170 : : "--\n"
171 : : "\n"
172 : : "Return the index where to insert item x in list a, assuming a is sorted.\n"
173 : : "\n"
174 : : "The return value i is such that all e in a[:i] have e < x, and all e in\n"
175 : : "a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will\n"
176 : : "insert just before the leftmost x already there.\n"
177 : : "\n"
178 : : "Optional args lo (default 0) and hi (default len(a)) bound the\n"
179 : : "slice of a to be searched.");
180 : :
181 : : #define _BISECT_BISECT_LEFT_METHODDEF \
182 : : {"bisect_left", _PyCFunction_CAST(_bisect_bisect_left), METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_left__doc__},
183 : :
184 : : static Py_ssize_t
185 : : _bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x,
186 : : Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
187 : :
188 : : static PyObject *
189 : 46277 : _bisect_bisect_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
190 : : {
191 : 46277 : PyObject *return_value = NULL;
192 : : static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
193 : : static _PyArg_Parser _parser = {NULL, _keywords, "bisect_left", 0};
194 : : PyObject *argsbuf[5];
195 [ + + ]: 46277 : Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
196 : : PyObject *a;
197 : : PyObject *x;
198 : 46277 : Py_ssize_t lo = 0;
199 : 46277 : Py_ssize_t hi = -1;
200 : 46277 : PyObject *key = Py_None;
201 : : Py_ssize_t _return_value;
202 : :
203 [ + + + + : 46277 : args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+ - - + ]
204 [ + + ]: 46277 : if (!args) {
205 : 1 : goto exit;
206 : : }
207 : 46276 : a = args[0];
208 : 46276 : x = args[1];
209 [ + + ]: 46276 : if (!noptargs) {
210 : 45472 : goto skip_optional_pos;
211 : : }
212 [ + + ]: 804 : if (args[2]) {
213 : : {
214 : 784 : Py_ssize_t ival = -1;
215 : 784 : PyObject *iobj = _PyNumber_Index(args[2]);
216 [ + - ]: 784 : if (iobj != NULL) {
217 : 784 : ival = PyLong_AsSsize_t(iobj);
218 : 784 : Py_DECREF(iobj);
219 : : }
220 [ + + - + ]: 784 : if (ival == -1 && PyErr_Occurred()) {
221 : 0 : goto exit;
222 : : }
223 : 784 : lo = ival;
224 : : }
225 [ - + ]: 784 : if (!--noptargs) {
226 : 0 : goto skip_optional_pos;
227 : : }
228 : : }
229 [ + + ]: 804 : if (args[3]) {
230 [ - + ]: 784 : if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
231 : 0 : goto exit;
232 : : }
233 [ - + ]: 784 : if (!--noptargs) {
234 : 784 : goto skip_optional_pos;
235 : : }
236 : : }
237 : 20 : skip_optional_pos:
238 [ + + ]: 46276 : if (!noptargs) {
239 : 46256 : goto skip_optional_kwonly;
240 : : }
241 : 20 : key = args[4];
242 : 46276 : skip_optional_kwonly:
243 : 46276 : _return_value = _bisect_bisect_left_impl(module, a, x, lo, hi, key);
244 [ + + + - ]: 46276 : if ((_return_value == -1) && PyErr_Occurred()) {
245 : 5 : goto exit;
246 : : }
247 : 46271 : return_value = PyLong_FromSsize_t(_return_value);
248 : :
249 : 46277 : exit:
250 : 46277 : return return_value;
251 : : }
252 : :
253 : : PyDoc_STRVAR(_bisect_insort_left__doc__,
254 : : "insort_left($module, /, a, x, lo=0, hi=None, *, key=None)\n"
255 : : "--\n"
256 : : "\n"
257 : : "Insert item x in list a, and keep it sorted assuming a is sorted.\n"
258 : : "\n"
259 : : "If x is already in a, insert it to the left of the leftmost x.\n"
260 : : "\n"
261 : : "Optional args lo (default 0) and hi (default len(a)) bound the\n"
262 : : "slice of a to be searched.");
263 : :
264 : : #define _BISECT_INSORT_LEFT_METHODDEF \
265 : : {"insort_left", _PyCFunction_CAST(_bisect_insort_left), METH_FASTCALL|METH_KEYWORDS, _bisect_insort_left__doc__},
266 : :
267 : : static PyObject *
268 : : _bisect_insort_left_impl(PyObject *module, PyObject *a, PyObject *x,
269 : : Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
270 : :
271 : : static PyObject *
272 : 563 : _bisect_insort_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
273 : : {
274 : 563 : PyObject *return_value = NULL;
275 : : static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
276 : : static _PyArg_Parser _parser = {NULL, _keywords, "insort_left", 0};
277 : : PyObject *argsbuf[5];
278 [ + + ]: 563 : Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
279 : : PyObject *a;
280 : : PyObject *x;
281 : 563 : Py_ssize_t lo = 0;
282 : 563 : Py_ssize_t hi = -1;
283 : 563 : PyObject *key = Py_None;
284 : :
285 [ + + + + : 563 : args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+ - - + ]
286 [ + + ]: 563 : if (!args) {
287 : 1 : goto exit;
288 : : }
289 : 562 : a = args[0];
290 : 562 : x = args[1];
291 [ + + ]: 562 : if (!noptargs) {
292 : 517 : goto skip_optional_pos;
293 : : }
294 [ + + ]: 45 : if (args[2]) {
295 : : {
296 : 3 : Py_ssize_t ival = -1;
297 : 3 : PyObject *iobj = _PyNumber_Index(args[2]);
298 [ + - ]: 3 : if (iobj != NULL) {
299 : 3 : ival = PyLong_AsSsize_t(iobj);
300 : 3 : Py_DECREF(iobj);
301 : : }
302 [ + + - + ]: 3 : if (ival == -1 && PyErr_Occurred()) {
303 : 0 : goto exit;
304 : : }
305 : 3 : lo = ival;
306 : : }
307 [ - + ]: 3 : if (!--noptargs) {
308 : 0 : goto skip_optional_pos;
309 : : }
310 : : }
311 [ + + ]: 45 : if (args[3]) {
312 [ - + ]: 3 : if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
313 : 0 : goto exit;
314 : : }
315 [ - + ]: 3 : if (!--noptargs) {
316 : 3 : goto skip_optional_pos;
317 : : }
318 : : }
319 : 42 : skip_optional_pos:
320 [ + + ]: 562 : if (!noptargs) {
321 : 520 : goto skip_optional_kwonly;
322 : : }
323 : 42 : key = args[4];
324 : 562 : skip_optional_kwonly:
325 : 562 : return_value = _bisect_insort_left_impl(module, a, x, lo, hi, key);
326 : :
327 : 563 : exit:
328 : 563 : return return_value;
329 : : }
330 : : /*[clinic end generated code: output=ee8c32ff8d3d1fac input=a9049054013a1b77]*/
|