LCOV - code coverage report
Current view: top level - Modules/clinic - _bisectmodule.c.h (source / functions) Hit Total Coverage
Test: CPython 3.12 LCOV report [commit acb105a7c1f] Lines: 143 154 92.9 %
Date: 2022-07-20 13:12:14 Functions: 4 4 100.0 %
Branches: 107 136 78.7 %

           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]*/

Generated by: LCOV version 1.14