LCOV - code coverage report
Current view: top level - Modules/clinic - cmathmodule.c.h (source / functions) Hit Total Coverage
Test: CPython 3.12 LCOV report [commit acb105a7c1f] Lines: 297 348 85.3 %
Date: 2022-07-20 13:12:14 Functions: 23 23 100.0 %
Branches: 117 166 70.5 %

           Branch data     Line data    Source code
       1                 :            : /*[clinic input]
       2                 :            : preserve
       3                 :            : [clinic start generated code]*/
       4                 :            : 
       5                 :            : PyDoc_STRVAR(cmath_acos__doc__,
       6                 :            : "acos($module, z, /)\n"
       7                 :            : "--\n"
       8                 :            : "\n"
       9                 :            : "Return the arc cosine of z.");
      10                 :            : 
      11                 :            : #define CMATH_ACOS_METHODDEF    \
      12                 :            :     {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__},
      13                 :            : 
      14                 :            : static Py_complex
      15                 :            : cmath_acos_impl(PyObject *module, Py_complex z);
      16                 :            : 
      17                 :            : static PyObject *
      18                 :        210 : cmath_acos(PyObject *module, PyObject *arg)
      19                 :            : {
      20                 :        210 :     PyObject *return_value = NULL;
      21                 :            :     Py_complex z;
      22                 :            :     Py_complex _return_value;
      23                 :            : 
      24                 :        210 :     z = PyComplex_AsCComplex(arg);
      25         [ +  + ]:        210 :     if (PyErr_Occurred()) {
      26                 :         24 :         goto exit;
      27                 :            :     }
      28                 :            :     /* modifications for z */
      29                 :        186 :     errno = 0;
      30                 :        186 :     _return_value = cmath_acos_impl(module, z);
      31         [ -  + ]:        186 :     if (errno == EDOM) {
      32                 :          0 :         PyErr_SetString(PyExc_ValueError, "math domain error");
      33                 :          0 :         goto exit;
      34                 :            :     }
      35         [ -  + ]:        186 :     else if (errno == ERANGE) {
      36                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
      37                 :          0 :         goto exit;
      38                 :            :     }
      39                 :            :     else {
      40                 :        186 :         return_value = PyComplex_FromCComplex(_return_value);
      41                 :            :     }
      42                 :            : 
      43                 :        210 : exit:
      44                 :        210 :     return return_value;
      45                 :            : }
      46                 :            : 
      47                 :            : PyDoc_STRVAR(cmath_acosh__doc__,
      48                 :            : "acosh($module, z, /)\n"
      49                 :            : "--\n"
      50                 :            : "\n"
      51                 :            : "Return the inverse hyperbolic cosine of z.");
      52                 :            : 
      53                 :            : #define CMATH_ACOSH_METHODDEF    \
      54                 :            :     {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__},
      55                 :            : 
      56                 :            : static Py_complex
      57                 :            : cmath_acosh_impl(PyObject *module, Py_complex z);
      58                 :            : 
      59                 :            : static PyObject *
      60                 :        195 : cmath_acosh(PyObject *module, PyObject *arg)
      61                 :            : {
      62                 :        195 :     PyObject *return_value = NULL;
      63                 :            :     Py_complex z;
      64                 :            :     Py_complex _return_value;
      65                 :            : 
      66                 :        195 :     z = PyComplex_AsCComplex(arg);
      67         [ +  + ]:        195 :     if (PyErr_Occurred()) {
      68                 :         24 :         goto exit;
      69                 :            :     }
      70                 :            :     /* modifications for z */
      71                 :        171 :     errno = 0;
      72                 :        171 :     _return_value = cmath_acosh_impl(module, z);
      73         [ -  + ]:        171 :     if (errno == EDOM) {
      74                 :          0 :         PyErr_SetString(PyExc_ValueError, "math domain error");
      75                 :          0 :         goto exit;
      76                 :            :     }
      77         [ -  + ]:        171 :     else if (errno == ERANGE) {
      78                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
      79                 :          0 :         goto exit;
      80                 :            :     }
      81                 :            :     else {
      82                 :        171 :         return_value = PyComplex_FromCComplex(_return_value);
      83                 :            :     }
      84                 :            : 
      85                 :        195 : exit:
      86                 :        195 :     return return_value;
      87                 :            : }
      88                 :            : 
      89                 :            : PyDoc_STRVAR(cmath_asin__doc__,
      90                 :            : "asin($module, z, /)\n"
      91                 :            : "--\n"
      92                 :            : "\n"
      93                 :            : "Return the arc sine of z.");
      94                 :            : 
      95                 :            : #define CMATH_ASIN_METHODDEF    \
      96                 :            :     {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__},
      97                 :            : 
      98                 :            : static Py_complex
      99                 :            : cmath_asin_impl(PyObject *module, Py_complex z);
     100                 :            : 
     101                 :            : static PyObject *
     102                 :        198 : cmath_asin(PyObject *module, PyObject *arg)
     103                 :            : {
     104                 :        198 :     PyObject *return_value = NULL;
     105                 :            :     Py_complex z;
     106                 :            :     Py_complex _return_value;
     107                 :            : 
     108                 :        198 :     z = PyComplex_AsCComplex(arg);
     109         [ +  + ]:        198 :     if (PyErr_Occurred()) {
     110                 :         24 :         goto exit;
     111                 :            :     }
     112                 :            :     /* modifications for z */
     113                 :        174 :     errno = 0;
     114                 :        174 :     _return_value = cmath_asin_impl(module, z);
     115         [ -  + ]:        174 :     if (errno == EDOM) {
     116                 :          0 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     117                 :          0 :         goto exit;
     118                 :            :     }
     119         [ -  + ]:        174 :     else if (errno == ERANGE) {
     120                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     121                 :          0 :         goto exit;
     122                 :            :     }
     123                 :            :     else {
     124                 :        174 :         return_value = PyComplex_FromCComplex(_return_value);
     125                 :            :     }
     126                 :            : 
     127                 :        198 : exit:
     128                 :        198 :     return return_value;
     129                 :            : }
     130                 :            : 
     131                 :            : PyDoc_STRVAR(cmath_asinh__doc__,
     132                 :            : "asinh($module, z, /)\n"
     133                 :            : "--\n"
     134                 :            : "\n"
     135                 :            : "Return the inverse hyperbolic sine of z.");
     136                 :            : 
     137                 :            : #define CMATH_ASINH_METHODDEF    \
     138                 :            :     {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__},
     139                 :            : 
     140                 :            : static Py_complex
     141                 :            : cmath_asinh_impl(PyObject *module, Py_complex z);
     142                 :            : 
     143                 :            : static PyObject *
     144                 :        195 : cmath_asinh(PyObject *module, PyObject *arg)
     145                 :            : {
     146                 :        195 :     PyObject *return_value = NULL;
     147                 :            :     Py_complex z;
     148                 :            :     Py_complex _return_value;
     149                 :            : 
     150                 :        195 :     z = PyComplex_AsCComplex(arg);
     151         [ +  + ]:        195 :     if (PyErr_Occurred()) {
     152                 :         24 :         goto exit;
     153                 :            :     }
     154                 :            :     /* modifications for z */
     155                 :        171 :     errno = 0;
     156                 :        171 :     _return_value = cmath_asinh_impl(module, z);
     157         [ -  + ]:        171 :     if (errno == EDOM) {
     158                 :          0 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     159                 :          0 :         goto exit;
     160                 :            :     }
     161         [ -  + ]:        171 :     else if (errno == ERANGE) {
     162                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     163                 :          0 :         goto exit;
     164                 :            :     }
     165                 :            :     else {
     166                 :        171 :         return_value = PyComplex_FromCComplex(_return_value);
     167                 :            :     }
     168                 :            : 
     169                 :        195 : exit:
     170                 :        195 :     return return_value;
     171                 :            : }
     172                 :            : 
     173                 :            : PyDoc_STRVAR(cmath_atan__doc__,
     174                 :            : "atan($module, z, /)\n"
     175                 :            : "--\n"
     176                 :            : "\n"
     177                 :            : "Return the arc tangent of z.");
     178                 :            : 
     179                 :            : #define CMATH_ATAN_METHODDEF    \
     180                 :            :     {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__},
     181                 :            : 
     182                 :            : static Py_complex
     183                 :            : cmath_atan_impl(PyObject *module, Py_complex z);
     184                 :            : 
     185                 :            : static PyObject *
     186                 :        225 : cmath_atan(PyObject *module, PyObject *arg)
     187                 :            : {
     188                 :        225 :     PyObject *return_value = NULL;
     189                 :            :     Py_complex z;
     190                 :            :     Py_complex _return_value;
     191                 :            : 
     192                 :        225 :     z = PyComplex_AsCComplex(arg);
     193         [ +  + ]:        225 :     if (PyErr_Occurred()) {
     194                 :         24 :         goto exit;
     195                 :            :     }
     196                 :            :     /* modifications for z */
     197                 :        201 :     errno = 0;
     198                 :        201 :     _return_value = cmath_atan_impl(module, z);
     199         [ +  + ]:        201 :     if (errno == EDOM) {
     200                 :          4 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     201                 :          4 :         goto exit;
     202                 :            :     }
     203         [ -  + ]:        197 :     else if (errno == ERANGE) {
     204                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     205                 :          0 :         goto exit;
     206                 :            :     }
     207                 :            :     else {
     208                 :        197 :         return_value = PyComplex_FromCComplex(_return_value);
     209                 :            :     }
     210                 :            : 
     211                 :        225 : exit:
     212                 :        225 :     return return_value;
     213                 :            : }
     214                 :            : 
     215                 :            : PyDoc_STRVAR(cmath_atanh__doc__,
     216                 :            : "atanh($module, z, /)\n"
     217                 :            : "--\n"
     218                 :            : "\n"
     219                 :            : "Return the inverse hyperbolic tangent of z.");
     220                 :            : 
     221                 :            : #define CMATH_ATANH_METHODDEF    \
     222                 :            :     {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__},
     223                 :            : 
     224                 :            : static Py_complex
     225                 :            : cmath_atanh_impl(PyObject *module, Py_complex z);
     226                 :            : 
     227                 :            : static PyObject *
     228                 :        200 : cmath_atanh(PyObject *module, PyObject *arg)
     229                 :            : {
     230                 :        200 :     PyObject *return_value = NULL;
     231                 :            :     Py_complex z;
     232                 :            :     Py_complex _return_value;
     233                 :            : 
     234                 :        200 :     z = PyComplex_AsCComplex(arg);
     235         [ +  + ]:        200 :     if (PyErr_Occurred()) {
     236                 :         24 :         goto exit;
     237                 :            :     }
     238                 :            :     /* modifications for z */
     239                 :        176 :     errno = 0;
     240                 :        176 :     _return_value = cmath_atanh_impl(module, z);
     241         [ +  + ]:        176 :     if (errno == EDOM) {
     242                 :          4 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     243                 :          4 :         goto exit;
     244                 :            :     }
     245         [ -  + ]:        172 :     else if (errno == ERANGE) {
     246                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     247                 :          0 :         goto exit;
     248                 :            :     }
     249                 :            :     else {
     250                 :        172 :         return_value = PyComplex_FromCComplex(_return_value);
     251                 :            :     }
     252                 :            : 
     253                 :        200 : exit:
     254                 :        200 :     return return_value;
     255                 :            : }
     256                 :            : 
     257                 :            : PyDoc_STRVAR(cmath_cos__doc__,
     258                 :            : "cos($module, z, /)\n"
     259                 :            : "--\n"
     260                 :            : "\n"
     261                 :            : "Return the cosine of z.");
     262                 :            : 
     263                 :            : #define CMATH_COS_METHODDEF    \
     264                 :            :     {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__},
     265                 :            : 
     266                 :            : static Py_complex
     267                 :            : cmath_cos_impl(PyObject *module, Py_complex z);
     268                 :            : 
     269                 :            : static PyObject *
     270                 :        160 : cmath_cos(PyObject *module, PyObject *arg)
     271                 :            : {
     272                 :        160 :     PyObject *return_value = NULL;
     273                 :            :     Py_complex z;
     274                 :            :     Py_complex _return_value;
     275                 :            : 
     276                 :        160 :     z = PyComplex_AsCComplex(arg);
     277         [ +  + ]:        160 :     if (PyErr_Occurred()) {
     278                 :         24 :         goto exit;
     279                 :            :     }
     280                 :            :     /* modifications for z */
     281                 :        136 :     errno = 0;
     282                 :        136 :     _return_value = cmath_cos_impl(module, z);
     283         [ +  + ]:        136 :     if (errno == EDOM) {
     284                 :         12 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     285                 :         12 :         goto exit;
     286                 :            :     }
     287         [ -  + ]:        124 :     else if (errno == ERANGE) {
     288                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     289                 :          0 :         goto exit;
     290                 :            :     }
     291                 :            :     else {
     292                 :        124 :         return_value = PyComplex_FromCComplex(_return_value);
     293                 :            :     }
     294                 :            : 
     295                 :        160 : exit:
     296                 :        160 :     return return_value;
     297                 :            : }
     298                 :            : 
     299                 :            : PyDoc_STRVAR(cmath_cosh__doc__,
     300                 :            : "cosh($module, z, /)\n"
     301                 :            : "--\n"
     302                 :            : "\n"
     303                 :            : "Return the hyperbolic cosine of z.");
     304                 :            : 
     305                 :            : #define CMATH_COSH_METHODDEF    \
     306                 :            :     {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__},
     307                 :            : 
     308                 :            : static Py_complex
     309                 :            : cmath_cosh_impl(PyObject *module, Py_complex z);
     310                 :            : 
     311                 :            : static PyObject *
     312                 :        163 : cmath_cosh(PyObject *module, PyObject *arg)
     313                 :            : {
     314                 :        163 :     PyObject *return_value = NULL;
     315                 :            :     Py_complex z;
     316                 :            :     Py_complex _return_value;
     317                 :            : 
     318                 :        163 :     z = PyComplex_AsCComplex(arg);
     319         [ +  + ]:        163 :     if (PyErr_Occurred()) {
     320                 :         24 :         goto exit;
     321                 :            :     }
     322                 :            :     /* modifications for z */
     323                 :        139 :     errno = 0;
     324                 :        139 :     _return_value = cmath_cosh_impl(module, z);
     325         [ +  + ]:        139 :     if (errno == EDOM) {
     326                 :         12 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     327                 :         12 :         goto exit;
     328                 :            :     }
     329         [ -  + ]:        127 :     else if (errno == ERANGE) {
     330                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     331                 :          0 :         goto exit;
     332                 :            :     }
     333                 :            :     else {
     334                 :        127 :         return_value = PyComplex_FromCComplex(_return_value);
     335                 :            :     }
     336                 :            : 
     337                 :        163 : exit:
     338                 :        163 :     return return_value;
     339                 :            : }
     340                 :            : 
     341                 :            : PyDoc_STRVAR(cmath_exp__doc__,
     342                 :            : "exp($module, z, /)\n"
     343                 :            : "--\n"
     344                 :            : "\n"
     345                 :            : "Return the exponential value e**z.");
     346                 :            : 
     347                 :            : #define CMATH_EXP_METHODDEF    \
     348                 :            :     {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__},
     349                 :            : 
     350                 :            : static Py_complex
     351                 :            : cmath_exp_impl(PyObject *module, Py_complex z);
     352                 :            : 
     353                 :            : static PyObject *
     354                 :        172 : cmath_exp(PyObject *module, PyObject *arg)
     355                 :            : {
     356                 :        172 :     PyObject *return_value = NULL;
     357                 :            :     Py_complex z;
     358                 :            :     Py_complex _return_value;
     359                 :            : 
     360                 :        172 :     z = PyComplex_AsCComplex(arg);
     361         [ +  + ]:        172 :     if (PyErr_Occurred()) {
     362                 :         24 :         goto exit;
     363                 :            :     }
     364                 :            :     /* modifications for z */
     365                 :        148 :     errno = 0;
     366                 :        148 :     _return_value = cmath_exp_impl(module, z);
     367         [ +  + ]:        148 :     if (errno == EDOM) {
     368                 :         10 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     369                 :         10 :         goto exit;
     370                 :            :     }
     371         [ +  + ]:        138 :     else if (errno == ERANGE) {
     372                 :          5 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     373                 :          5 :         goto exit;
     374                 :            :     }
     375                 :            :     else {
     376                 :        133 :         return_value = PyComplex_FromCComplex(_return_value);
     377                 :            :     }
     378                 :            : 
     379                 :        172 : exit:
     380                 :        172 :     return return_value;
     381                 :            : }
     382                 :            : 
     383                 :            : PyDoc_STRVAR(cmath_log10__doc__,
     384                 :            : "log10($module, z, /)\n"
     385                 :            : "--\n"
     386                 :            : "\n"
     387                 :            : "Return the base-10 logarithm of z.");
     388                 :            : 
     389                 :            : #define CMATH_LOG10_METHODDEF    \
     390                 :            :     {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__},
     391                 :            : 
     392                 :            : static Py_complex
     393                 :            : cmath_log10_impl(PyObject *module, Py_complex z);
     394                 :            : 
     395                 :            : static PyObject *
     396                 :        206 : cmath_log10(PyObject *module, PyObject *arg)
     397                 :            : {
     398                 :        206 :     PyObject *return_value = NULL;
     399                 :            :     Py_complex z;
     400                 :            :     Py_complex _return_value;
     401                 :            : 
     402                 :        206 :     z = PyComplex_AsCComplex(arg);
     403         [ +  + ]:        206 :     if (PyErr_Occurred()) {
     404                 :         24 :         goto exit;
     405                 :            :     }
     406                 :            :     /* modifications for z */
     407                 :        182 :     errno = 0;
     408                 :        182 :     _return_value = cmath_log10_impl(module, z);
     409         [ +  + ]:        182 :     if (errno == EDOM) {
     410                 :          4 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     411                 :          4 :         goto exit;
     412                 :            :     }
     413         [ -  + ]:        178 :     else if (errno == ERANGE) {
     414                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     415                 :          0 :         goto exit;
     416                 :            :     }
     417                 :            :     else {
     418                 :        178 :         return_value = PyComplex_FromCComplex(_return_value);
     419                 :            :     }
     420                 :            : 
     421                 :        206 : exit:
     422                 :        206 :     return return_value;
     423                 :            : }
     424                 :            : 
     425                 :            : PyDoc_STRVAR(cmath_sin__doc__,
     426                 :            : "sin($module, z, /)\n"
     427                 :            : "--\n"
     428                 :            : "\n"
     429                 :            : "Return the sine of z.");
     430                 :            : 
     431                 :            : #define CMATH_SIN_METHODDEF    \
     432                 :            :     {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__},
     433                 :            : 
     434                 :            : static Py_complex
     435                 :            : cmath_sin_impl(PyObject *module, Py_complex z);
     436                 :            : 
     437                 :            : static PyObject *
     438                 :        160 : cmath_sin(PyObject *module, PyObject *arg)
     439                 :            : {
     440                 :        160 :     PyObject *return_value = NULL;
     441                 :            :     Py_complex z;
     442                 :            :     Py_complex _return_value;
     443                 :            : 
     444                 :        160 :     z = PyComplex_AsCComplex(arg);
     445         [ +  + ]:        160 :     if (PyErr_Occurred()) {
     446                 :         24 :         goto exit;
     447                 :            :     }
     448                 :            :     /* modifications for z */
     449                 :        136 :     errno = 0;
     450                 :        136 :     _return_value = cmath_sin_impl(module, z);
     451         [ +  + ]:        136 :     if (errno == EDOM) {
     452                 :         12 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     453                 :         12 :         goto exit;
     454                 :            :     }
     455         [ -  + ]:        124 :     else if (errno == ERANGE) {
     456                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     457                 :          0 :         goto exit;
     458                 :            :     }
     459                 :            :     else {
     460                 :        124 :         return_value = PyComplex_FromCComplex(_return_value);
     461                 :            :     }
     462                 :            : 
     463                 :        160 : exit:
     464                 :        160 :     return return_value;
     465                 :            : }
     466                 :            : 
     467                 :            : PyDoc_STRVAR(cmath_sinh__doc__,
     468                 :            : "sinh($module, z, /)\n"
     469                 :            : "--\n"
     470                 :            : "\n"
     471                 :            : "Return the hyperbolic sine of z.");
     472                 :            : 
     473                 :            : #define CMATH_SINH_METHODDEF    \
     474                 :            :     {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__},
     475                 :            : 
     476                 :            : static Py_complex
     477                 :            : cmath_sinh_impl(PyObject *module, Py_complex z);
     478                 :            : 
     479                 :            : static PyObject *
     480                 :        164 : cmath_sinh(PyObject *module, PyObject *arg)
     481                 :            : {
     482                 :        164 :     PyObject *return_value = NULL;
     483                 :            :     Py_complex z;
     484                 :            :     Py_complex _return_value;
     485                 :            : 
     486                 :        164 :     z = PyComplex_AsCComplex(arg);
     487         [ +  + ]:        164 :     if (PyErr_Occurred()) {
     488                 :         24 :         goto exit;
     489                 :            :     }
     490                 :            :     /* modifications for z */
     491                 :        140 :     errno = 0;
     492                 :        140 :     _return_value = cmath_sinh_impl(module, z);
     493         [ +  + ]:        140 :     if (errno == EDOM) {
     494                 :         12 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     495                 :         12 :         goto exit;
     496                 :            :     }
     497         [ -  + ]:        128 :     else if (errno == ERANGE) {
     498                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     499                 :          0 :         goto exit;
     500                 :            :     }
     501                 :            :     else {
     502                 :        128 :         return_value = PyComplex_FromCComplex(_return_value);
     503                 :            :     }
     504                 :            : 
     505                 :        164 : exit:
     506                 :        164 :     return return_value;
     507                 :            : }
     508                 :            : 
     509                 :            : PyDoc_STRVAR(cmath_sqrt__doc__,
     510                 :            : "sqrt($module, z, /)\n"
     511                 :            : "--\n"
     512                 :            : "\n"
     513                 :            : "Return the square root of z.");
     514                 :            : 
     515                 :            : #define CMATH_SQRT_METHODDEF    \
     516                 :            :     {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__},
     517                 :            : 
     518                 :            : static Py_complex
     519                 :            : cmath_sqrt_impl(PyObject *module, Py_complex z);
     520                 :            : 
     521                 :            : static PyObject *
     522                 :        190 : cmath_sqrt(PyObject *module, PyObject *arg)
     523                 :            : {
     524                 :        190 :     PyObject *return_value = NULL;
     525                 :            :     Py_complex z;
     526                 :            :     Py_complex _return_value;
     527                 :            : 
     528                 :        190 :     z = PyComplex_AsCComplex(arg);
     529         [ +  + ]:        190 :     if (PyErr_Occurred()) {
     530                 :         24 :         goto exit;
     531                 :            :     }
     532                 :            :     /* modifications for z */
     533                 :        166 :     errno = 0;
     534                 :        166 :     _return_value = cmath_sqrt_impl(module, z);
     535         [ -  + ]:        166 :     if (errno == EDOM) {
     536                 :          0 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     537                 :          0 :         goto exit;
     538                 :            :     }
     539         [ -  + ]:        166 :     else if (errno == ERANGE) {
     540                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     541                 :          0 :         goto exit;
     542                 :            :     }
     543                 :            :     else {
     544                 :        166 :         return_value = PyComplex_FromCComplex(_return_value);
     545                 :            :     }
     546                 :            : 
     547                 :        190 : exit:
     548                 :        190 :     return return_value;
     549                 :            : }
     550                 :            : 
     551                 :            : PyDoc_STRVAR(cmath_tan__doc__,
     552                 :            : "tan($module, z, /)\n"
     553                 :            : "--\n"
     554                 :            : "\n"
     555                 :            : "Return the tangent of z.");
     556                 :            : 
     557                 :            : #define CMATH_TAN_METHODDEF    \
     558                 :            :     {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__},
     559                 :            : 
     560                 :            : static Py_complex
     561                 :            : cmath_tan_impl(PyObject *module, Py_complex z);
     562                 :            : 
     563                 :            : static PyObject *
     564                 :        163 : cmath_tan(PyObject *module, PyObject *arg)
     565                 :            : {
     566                 :        163 :     PyObject *return_value = NULL;
     567                 :            :     Py_complex z;
     568                 :            :     Py_complex _return_value;
     569                 :            : 
     570                 :        163 :     z = PyComplex_AsCComplex(arg);
     571         [ +  + ]:        163 :     if (PyErr_Occurred()) {
     572                 :         24 :         goto exit;
     573                 :            :     }
     574                 :            :     /* modifications for z */
     575                 :        139 :     errno = 0;
     576                 :        139 :     _return_value = cmath_tan_impl(module, z);
     577         [ +  + ]:        139 :     if (errno == EDOM) {
     578                 :          8 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     579                 :          8 :         goto exit;
     580                 :            :     }
     581         [ -  + ]:        131 :     else if (errno == ERANGE) {
     582                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     583                 :          0 :         goto exit;
     584                 :            :     }
     585                 :            :     else {
     586                 :        131 :         return_value = PyComplex_FromCComplex(_return_value);
     587                 :            :     }
     588                 :            : 
     589                 :        163 : exit:
     590                 :        163 :     return return_value;
     591                 :            : }
     592                 :            : 
     593                 :            : PyDoc_STRVAR(cmath_tanh__doc__,
     594                 :            : "tanh($module, z, /)\n"
     595                 :            : "--\n"
     596                 :            : "\n"
     597                 :            : "Return the hyperbolic tangent of z.");
     598                 :            : 
     599                 :            : #define CMATH_TANH_METHODDEF    \
     600                 :            :     {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__},
     601                 :            : 
     602                 :            : static Py_complex
     603                 :            : cmath_tanh_impl(PyObject *module, Py_complex z);
     604                 :            : 
     605                 :            : static PyObject *
     606                 :        166 : cmath_tanh(PyObject *module, PyObject *arg)
     607                 :            : {
     608                 :        166 :     PyObject *return_value = NULL;
     609                 :            :     Py_complex z;
     610                 :            :     Py_complex _return_value;
     611                 :            : 
     612                 :        166 :     z = PyComplex_AsCComplex(arg);
     613         [ +  + ]:        166 :     if (PyErr_Occurred()) {
     614                 :         24 :         goto exit;
     615                 :            :     }
     616                 :            :     /* modifications for z */
     617                 :        142 :     errno = 0;
     618                 :        142 :     _return_value = cmath_tanh_impl(module, z);
     619         [ +  + ]:        142 :     if (errno == EDOM) {
     620                 :          8 :         PyErr_SetString(PyExc_ValueError, "math domain error");
     621                 :          8 :         goto exit;
     622                 :            :     }
     623         [ -  + ]:        134 :     else if (errno == ERANGE) {
     624                 :          0 :         PyErr_SetString(PyExc_OverflowError, "math range error");
     625                 :          0 :         goto exit;
     626                 :            :     }
     627                 :            :     else {
     628                 :        134 :         return_value = PyComplex_FromCComplex(_return_value);
     629                 :            :     }
     630                 :            : 
     631                 :        166 : exit:
     632                 :        166 :     return return_value;
     633                 :            : }
     634                 :            : 
     635                 :            : PyDoc_STRVAR(cmath_log__doc__,
     636                 :            : "log($module, z, base=<unrepresentable>, /)\n"
     637                 :            : "--\n"
     638                 :            : "\n"
     639                 :            : "log(z[, base]) -> the logarithm of z to the given base.\n"
     640                 :            : "\n"
     641                 :            : "If the base not specified, returns the natural logarithm (base e) of z.");
     642                 :            : 
     643                 :            : #define CMATH_LOG_METHODDEF    \
     644                 :            :     {"log", _PyCFunction_CAST(cmath_log), METH_FASTCALL, cmath_log__doc__},
     645                 :            : 
     646                 :            : static PyObject *
     647                 :            : cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj);
     648                 :            : 
     649                 :            : static PyObject *
     650                 :        329 : cmath_log(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     651                 :            : {
     652                 :        329 :     PyObject *return_value = NULL;
     653                 :            :     Py_complex x;
     654                 :        329 :     PyObject *y_obj = NULL;
     655                 :            : 
     656   [ +  -  -  +  :        329 :     if (!_PyArg_CheckPositional("log", nargs, 1, 2)) {
                   -  - ]
     657                 :          0 :         goto exit;
     658                 :            :     }
     659                 :        329 :     x = PyComplex_AsCComplex(args[0]);
     660         [ +  + ]:        329 :     if (PyErr_Occurred()) {
     661                 :         48 :         goto exit;
     662                 :            :     }
     663         [ +  + ]:        281 :     if (nargs < 2) {
     664                 :        182 :         goto skip_optional;
     665                 :            :     }
     666                 :         99 :     y_obj = args[1];
     667                 :        281 : skip_optional:
     668                 :        281 :     return_value = cmath_log_impl(module, x, y_obj);
     669                 :            : 
     670                 :        329 : exit:
     671                 :        329 :     return return_value;
     672                 :            : }
     673                 :            : 
     674                 :            : PyDoc_STRVAR(cmath_phase__doc__,
     675                 :            : "phase($module, z, /)\n"
     676                 :            : "--\n"
     677                 :            : "\n"
     678                 :            : "Return argument, also known as the phase angle, of a complex.");
     679                 :            : 
     680                 :            : #define CMATH_PHASE_METHODDEF    \
     681                 :            :     {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__},
     682                 :            : 
     683                 :            : static PyObject *
     684                 :            : cmath_phase_impl(PyObject *module, Py_complex z);
     685                 :            : 
     686                 :            : static PyObject *
     687                 :         43 : cmath_phase(PyObject *module, PyObject *arg)
     688                 :            : {
     689                 :         43 :     PyObject *return_value = NULL;
     690                 :            :     Py_complex z;
     691                 :            : 
     692                 :         43 :     z = PyComplex_AsCComplex(arg);
     693         [ -  + ]:         43 :     if (PyErr_Occurred()) {
     694                 :          0 :         goto exit;
     695                 :            :     }
     696                 :         43 :     return_value = cmath_phase_impl(module, z);
     697                 :            : 
     698                 :         43 : exit:
     699                 :         43 :     return return_value;
     700                 :            : }
     701                 :            : 
     702                 :            : PyDoc_STRVAR(cmath_polar__doc__,
     703                 :            : "polar($module, z, /)\n"
     704                 :            : "--\n"
     705                 :            : "\n"
     706                 :            : "Convert a complex from rectangular coordinates to polar coordinates.\n"
     707                 :            : "\n"
     708                 :            : "r is the distance from 0 and phi the phase angle.");
     709                 :            : 
     710                 :            : #define CMATH_POLAR_METHODDEF    \
     711                 :            :     {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__},
     712                 :            : 
     713                 :            : static PyObject *
     714                 :            : cmath_polar_impl(PyObject *module, Py_complex z);
     715                 :            : 
     716                 :            : static PyObject *
     717                 :         78 : cmath_polar(PyObject *module, PyObject *arg)
     718                 :            : {
     719                 :         78 :     PyObject *return_value = NULL;
     720                 :            :     Py_complex z;
     721                 :            : 
     722                 :         78 :     z = PyComplex_AsCComplex(arg);
     723         [ -  + ]:         78 :     if (PyErr_Occurred()) {
     724                 :          0 :         goto exit;
     725                 :            :     }
     726                 :         78 :     return_value = cmath_polar_impl(module, z);
     727                 :            : 
     728                 :         78 : exit:
     729                 :         78 :     return return_value;
     730                 :            : }
     731                 :            : 
     732                 :            : PyDoc_STRVAR(cmath_rect__doc__,
     733                 :            : "rect($module, r, phi, /)\n"
     734                 :            : "--\n"
     735                 :            : "\n"
     736                 :            : "Convert from polar coordinates to rectangular coordinates.");
     737                 :            : 
     738                 :            : #define CMATH_RECT_METHODDEF    \
     739                 :            :     {"rect", _PyCFunction_CAST(cmath_rect), METH_FASTCALL, cmath_rect__doc__},
     740                 :            : 
     741                 :            : static PyObject *
     742                 :            : cmath_rect_impl(PyObject *module, double r, double phi);
     743                 :            : 
     744                 :            : static PyObject *
     745                 :         58 : cmath_rect(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     746                 :            : {
     747                 :         58 :     PyObject *return_value = NULL;
     748                 :            :     double r;
     749                 :            :     double phi;
     750                 :            : 
     751   [ +  -  -  +  :         58 :     if (!_PyArg_CheckPositional("rect", nargs, 2, 2)) {
                   -  - ]
     752                 :          0 :         goto exit;
     753                 :            :     }
     754         [ +  + ]:         58 :     if (PyFloat_CheckExact(args[0])) {
     755                 :         53 :         r = PyFloat_AS_DOUBLE(args[0]);
     756                 :            :     }
     757                 :            :     else
     758                 :            :     {
     759                 :          5 :         r = PyFloat_AsDouble(args[0]);
     760   [ -  +  -  - ]:          5 :         if (r == -1.0 && PyErr_Occurred()) {
     761                 :          0 :             goto exit;
     762                 :            :         }
     763                 :            :     }
     764         [ +  + ]:         58 :     if (PyFloat_CheckExact(args[1])) {
     765                 :         56 :         phi = PyFloat_AS_DOUBLE(args[1]);
     766                 :            :     }
     767                 :            :     else
     768                 :            :     {
     769                 :          2 :         phi = PyFloat_AsDouble(args[1]);
     770   [ -  +  -  - ]:          2 :         if (phi == -1.0 && PyErr_Occurred()) {
     771                 :          0 :             goto exit;
     772                 :            :         }
     773                 :            :     }
     774                 :         58 :     return_value = cmath_rect_impl(module, r, phi);
     775                 :            : 
     776                 :         58 : exit:
     777                 :         58 :     return return_value;
     778                 :            : }
     779                 :            : 
     780                 :            : PyDoc_STRVAR(cmath_isfinite__doc__,
     781                 :            : "isfinite($module, z, /)\n"
     782                 :            : "--\n"
     783                 :            : "\n"
     784                 :            : "Return True if both the real and imaginary parts of z are finite, else False.");
     785                 :            : 
     786                 :            : #define CMATH_ISFINITE_METHODDEF    \
     787                 :            :     {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__},
     788                 :            : 
     789                 :            : static PyObject *
     790                 :            : cmath_isfinite_impl(PyObject *module, Py_complex z);
     791                 :            : 
     792                 :            : static PyObject *
     793                 :         49 : cmath_isfinite(PyObject *module, PyObject *arg)
     794                 :            : {
     795                 :         49 :     PyObject *return_value = NULL;
     796                 :            :     Py_complex z;
     797                 :            : 
     798                 :         49 :     z = PyComplex_AsCComplex(arg);
     799         [ -  + ]:         49 :     if (PyErr_Occurred()) {
     800                 :          0 :         goto exit;
     801                 :            :     }
     802                 :         49 :     return_value = cmath_isfinite_impl(module, z);
     803                 :            : 
     804                 :         49 : exit:
     805                 :         49 :     return return_value;
     806                 :            : }
     807                 :            : 
     808                 :            : PyDoc_STRVAR(cmath_isnan__doc__,
     809                 :            : "isnan($module, z, /)\n"
     810                 :            : "--\n"
     811                 :            : "\n"
     812                 :            : "Checks if the real or imaginary part of z not a number (NaN).");
     813                 :            : 
     814                 :            : #define CMATH_ISNAN_METHODDEF    \
     815                 :            :     {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__},
     816                 :            : 
     817                 :            : static PyObject *
     818                 :            : cmath_isnan_impl(PyObject *module, Py_complex z);
     819                 :            : 
     820                 :            : static PyObject *
     821                 :          9 : cmath_isnan(PyObject *module, PyObject *arg)
     822                 :            : {
     823                 :          9 :     PyObject *return_value = NULL;
     824                 :            :     Py_complex z;
     825                 :            : 
     826                 :          9 :     z = PyComplex_AsCComplex(arg);
     827         [ -  + ]:          9 :     if (PyErr_Occurred()) {
     828                 :          0 :         goto exit;
     829                 :            :     }
     830                 :          9 :     return_value = cmath_isnan_impl(module, z);
     831                 :            : 
     832                 :          9 : exit:
     833                 :          9 :     return return_value;
     834                 :            : }
     835                 :            : 
     836                 :            : PyDoc_STRVAR(cmath_isinf__doc__,
     837                 :            : "isinf($module, z, /)\n"
     838                 :            : "--\n"
     839                 :            : "\n"
     840                 :            : "Checks if the real or imaginary part of z is infinite.");
     841                 :            : 
     842                 :            : #define CMATH_ISINF_METHODDEF    \
     843                 :            :     {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__},
     844                 :            : 
     845                 :            : static PyObject *
     846                 :            : cmath_isinf_impl(PyObject *module, Py_complex z);
     847                 :            : 
     848                 :            : static PyObject *
     849                 :          9 : cmath_isinf(PyObject *module, PyObject *arg)
     850                 :            : {
     851                 :          9 :     PyObject *return_value = NULL;
     852                 :            :     Py_complex z;
     853                 :            : 
     854                 :          9 :     z = PyComplex_AsCComplex(arg);
     855         [ -  + ]:          9 :     if (PyErr_Occurred()) {
     856                 :          0 :         goto exit;
     857                 :            :     }
     858                 :          9 :     return_value = cmath_isinf_impl(module, z);
     859                 :            : 
     860                 :          9 : exit:
     861                 :          9 :     return return_value;
     862                 :            : }
     863                 :            : 
     864                 :            : PyDoc_STRVAR(cmath_isclose__doc__,
     865                 :            : "isclose($module, /, a, b, *, rel_tol=1e-09, abs_tol=0.0)\n"
     866                 :            : "--\n"
     867                 :            : "\n"
     868                 :            : "Determine whether two complex numbers are close in value.\n"
     869                 :            : "\n"
     870                 :            : "  rel_tol\n"
     871                 :            : "    maximum difference for being considered \"close\", relative to the\n"
     872                 :            : "    magnitude of the input values\n"
     873                 :            : "  abs_tol\n"
     874                 :            : "    maximum difference for being considered \"close\", regardless of the\n"
     875                 :            : "    magnitude of the input values\n"
     876                 :            : "\n"
     877                 :            : "Return True if a is close in value to b, and False otherwise.\n"
     878                 :            : "\n"
     879                 :            : "For the values to be considered close, the difference between them must be\n"
     880                 :            : "smaller than at least one of the tolerances.\n"
     881                 :            : "\n"
     882                 :            : "-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n"
     883                 :            : "not close to anything, even itself. inf and -inf are only close to themselves.");
     884                 :            : 
     885                 :            : #define CMATH_ISCLOSE_METHODDEF    \
     886                 :            :     {"isclose", _PyCFunction_CAST(cmath_isclose), METH_FASTCALL|METH_KEYWORDS, cmath_isclose__doc__},
     887                 :            : 
     888                 :            : static int
     889                 :            : cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b,
     890                 :            :                    double rel_tol, double abs_tol);
     891                 :            : 
     892                 :            : static PyObject *
     893                 :         85 : cmath_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     894                 :            : {
     895                 :         85 :     PyObject *return_value = NULL;
     896                 :            :     static const char * const _keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL};
     897                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "isclose", 0};
     898                 :            :     PyObject *argsbuf[4];
     899         [ +  + ]:         85 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
     900                 :            :     Py_complex a;
     901                 :            :     Py_complex b;
     902                 :         85 :     double rel_tol = 1e-09;
     903                 :         85 :     double abs_tol = 0.0;
     904                 :            :     int _return_value;
     905                 :            : 
     906   [ +  +  +  -  :         85 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
             +  -  -  + ]
     907         [ -  + ]:         85 :     if (!args) {
     908                 :          0 :         goto exit;
     909                 :            :     }
     910                 :         85 :     a = PyComplex_AsCComplex(args[0]);
     911         [ -  + ]:         85 :     if (PyErr_Occurred()) {
     912                 :          0 :         goto exit;
     913                 :            :     }
     914                 :         85 :     b = PyComplex_AsCComplex(args[1]);
     915         [ -  + ]:         85 :     if (PyErr_Occurred()) {
     916                 :          0 :         goto exit;
     917                 :            :     }
     918         [ +  + ]:         85 :     if (!noptargs) {
     919                 :          2 :         goto skip_optional_kwonly;
     920                 :            :     }
     921         [ +  + ]:         83 :     if (args[2]) {
     922         [ +  + ]:         53 :         if (PyFloat_CheckExact(args[2])) {
     923                 :         51 :             rel_tol = PyFloat_AS_DOUBLE(args[2]);
     924                 :            :         }
     925                 :            :         else
     926                 :            :         {
     927                 :          2 :             rel_tol = PyFloat_AsDouble(args[2]);
     928   [ +  -  +  - ]:          2 :             if (rel_tol == -1.0 && PyErr_Occurred()) {
     929                 :          2 :                 goto exit;
     930                 :            :             }
     931                 :            :         }
     932         [ +  + ]:         51 :         if (!--noptargs) {
     933                 :         44 :             goto skip_optional_kwonly;
     934                 :            :         }
     935                 :            :     }
     936         [ +  + ]:         37 :     if (PyFloat_CheckExact(args[3])) {
     937                 :         36 :         abs_tol = PyFloat_AS_DOUBLE(args[3]);
     938                 :            :     }
     939                 :            :     else
     940                 :            :     {
     941                 :          1 :         abs_tol = PyFloat_AsDouble(args[3]);
     942   [ +  -  -  + ]:          1 :         if (abs_tol == -1.0 && PyErr_Occurred()) {
     943                 :          1 :             goto exit;
     944                 :            :         }
     945                 :            :     }
     946                 :          0 : skip_optional_kwonly:
     947                 :         82 :     _return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol);
     948   [ +  +  +  - ]:         82 :     if ((_return_value == -1) && PyErr_Occurred()) {
     949                 :          2 :         goto exit;
     950                 :            :     }
     951                 :         80 :     return_value = PyBool_FromLong((long)_return_value);
     952                 :            : 
     953                 :         85 : exit:
     954                 :         85 :     return return_value;
     955                 :            : }
     956                 :            : /*[clinic end generated code: output=b8e445fcd2a3da65 input=a9049054013a1b77]*/

Generated by: LCOV version 1.14