Home | History | Annotate | Download | only in clinic
      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 cmath_acos(PyObject *module, PyObject *arg)
     19 {
     20     PyObject *return_value = NULL;
     21     Py_complex z;
     22     Py_complex _return_value;
     23 
     24     if (!PyArg_Parse(arg, "D:acos", &z)) {
     25         goto exit;
     26     }
     27     /* modifications for z */
     28     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
     29     _return_value = cmath_acos_impl(module, z);
     30     PyFPE_END_PROTECT(_return_value);
     31     if (errno == EDOM) {
     32         PyErr_SetString(PyExc_ValueError, "math domain error");
     33         goto exit;
     34     }
     35     else if (errno == ERANGE) {
     36         PyErr_SetString(PyExc_OverflowError, "math range error");
     37         goto exit;
     38     }
     39     else {
     40         return_value = PyComplex_FromCComplex(_return_value);
     41     }
     42 
     43 exit:
     44     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 cmath_acosh(PyObject *module, PyObject *arg)
     61 {
     62     PyObject *return_value = NULL;
     63     Py_complex z;
     64     Py_complex _return_value;
     65 
     66     if (!PyArg_Parse(arg, "D:acosh", &z)) {
     67         goto exit;
     68     }
     69     /* modifications for z */
     70     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
     71     _return_value = cmath_acosh_impl(module, z);
     72     PyFPE_END_PROTECT(_return_value);
     73     if (errno == EDOM) {
     74         PyErr_SetString(PyExc_ValueError, "math domain error");
     75         goto exit;
     76     }
     77     else if (errno == ERANGE) {
     78         PyErr_SetString(PyExc_OverflowError, "math range error");
     79         goto exit;
     80     }
     81     else {
     82         return_value = PyComplex_FromCComplex(_return_value);
     83     }
     84 
     85 exit:
     86     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 cmath_asin(PyObject *module, PyObject *arg)
    103 {
    104     PyObject *return_value = NULL;
    105     Py_complex z;
    106     Py_complex _return_value;
    107 
    108     if (!PyArg_Parse(arg, "D:asin", &z)) {
    109         goto exit;
    110     }
    111     /* modifications for z */
    112     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    113     _return_value = cmath_asin_impl(module, z);
    114     PyFPE_END_PROTECT(_return_value);
    115     if (errno == EDOM) {
    116         PyErr_SetString(PyExc_ValueError, "math domain error");
    117         goto exit;
    118     }
    119     else if (errno == ERANGE) {
    120         PyErr_SetString(PyExc_OverflowError, "math range error");
    121         goto exit;
    122     }
    123     else {
    124         return_value = PyComplex_FromCComplex(_return_value);
    125     }
    126 
    127 exit:
    128     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 cmath_asinh(PyObject *module, PyObject *arg)
    145 {
    146     PyObject *return_value = NULL;
    147     Py_complex z;
    148     Py_complex _return_value;
    149 
    150     if (!PyArg_Parse(arg, "D:asinh", &z)) {
    151         goto exit;
    152     }
    153     /* modifications for z */
    154     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    155     _return_value = cmath_asinh_impl(module, z);
    156     PyFPE_END_PROTECT(_return_value);
    157     if (errno == EDOM) {
    158         PyErr_SetString(PyExc_ValueError, "math domain error");
    159         goto exit;
    160     }
    161     else if (errno == ERANGE) {
    162         PyErr_SetString(PyExc_OverflowError, "math range error");
    163         goto exit;
    164     }
    165     else {
    166         return_value = PyComplex_FromCComplex(_return_value);
    167     }
    168 
    169 exit:
    170     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 cmath_atan(PyObject *module, PyObject *arg)
    187 {
    188     PyObject *return_value = NULL;
    189     Py_complex z;
    190     Py_complex _return_value;
    191 
    192     if (!PyArg_Parse(arg, "D:atan", &z)) {
    193         goto exit;
    194     }
    195     /* modifications for z */
    196     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    197     _return_value = cmath_atan_impl(module, z);
    198     PyFPE_END_PROTECT(_return_value);
    199     if (errno == EDOM) {
    200         PyErr_SetString(PyExc_ValueError, "math domain error");
    201         goto exit;
    202     }
    203     else if (errno == ERANGE) {
    204         PyErr_SetString(PyExc_OverflowError, "math range error");
    205         goto exit;
    206     }
    207     else {
    208         return_value = PyComplex_FromCComplex(_return_value);
    209     }
    210 
    211 exit:
    212     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 cmath_atanh(PyObject *module, PyObject *arg)
    229 {
    230     PyObject *return_value = NULL;
    231     Py_complex z;
    232     Py_complex _return_value;
    233 
    234     if (!PyArg_Parse(arg, "D:atanh", &z)) {
    235         goto exit;
    236     }
    237     /* modifications for z */
    238     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    239     _return_value = cmath_atanh_impl(module, z);
    240     PyFPE_END_PROTECT(_return_value);
    241     if (errno == EDOM) {
    242         PyErr_SetString(PyExc_ValueError, "math domain error");
    243         goto exit;
    244     }
    245     else if (errno == ERANGE) {
    246         PyErr_SetString(PyExc_OverflowError, "math range error");
    247         goto exit;
    248     }
    249     else {
    250         return_value = PyComplex_FromCComplex(_return_value);
    251     }
    252 
    253 exit:
    254     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 cmath_cos(PyObject *module, PyObject *arg)
    271 {
    272     PyObject *return_value = NULL;
    273     Py_complex z;
    274     Py_complex _return_value;
    275 
    276     if (!PyArg_Parse(arg, "D:cos", &z)) {
    277         goto exit;
    278     }
    279     /* modifications for z */
    280     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    281     _return_value = cmath_cos_impl(module, z);
    282     PyFPE_END_PROTECT(_return_value);
    283     if (errno == EDOM) {
    284         PyErr_SetString(PyExc_ValueError, "math domain error");
    285         goto exit;
    286     }
    287     else if (errno == ERANGE) {
    288         PyErr_SetString(PyExc_OverflowError, "math range error");
    289         goto exit;
    290     }
    291     else {
    292         return_value = PyComplex_FromCComplex(_return_value);
    293     }
    294 
    295 exit:
    296     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 cmath_cosh(PyObject *module, PyObject *arg)
    313 {
    314     PyObject *return_value = NULL;
    315     Py_complex z;
    316     Py_complex _return_value;
    317 
    318     if (!PyArg_Parse(arg, "D:cosh", &z)) {
    319         goto exit;
    320     }
    321     /* modifications for z */
    322     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    323     _return_value = cmath_cosh_impl(module, z);
    324     PyFPE_END_PROTECT(_return_value);
    325     if (errno == EDOM) {
    326         PyErr_SetString(PyExc_ValueError, "math domain error");
    327         goto exit;
    328     }
    329     else if (errno == ERANGE) {
    330         PyErr_SetString(PyExc_OverflowError, "math range error");
    331         goto exit;
    332     }
    333     else {
    334         return_value = PyComplex_FromCComplex(_return_value);
    335     }
    336 
    337 exit:
    338     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 cmath_exp(PyObject *module, PyObject *arg)
    355 {
    356     PyObject *return_value = NULL;
    357     Py_complex z;
    358     Py_complex _return_value;
    359 
    360     if (!PyArg_Parse(arg, "D:exp", &z)) {
    361         goto exit;
    362     }
    363     /* modifications for z */
    364     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    365     _return_value = cmath_exp_impl(module, z);
    366     PyFPE_END_PROTECT(_return_value);
    367     if (errno == EDOM) {
    368         PyErr_SetString(PyExc_ValueError, "math domain error");
    369         goto exit;
    370     }
    371     else if (errno == ERANGE) {
    372         PyErr_SetString(PyExc_OverflowError, "math range error");
    373         goto exit;
    374     }
    375     else {
    376         return_value = PyComplex_FromCComplex(_return_value);
    377     }
    378 
    379 exit:
    380     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 cmath_log10(PyObject *module, PyObject *arg)
    397 {
    398     PyObject *return_value = NULL;
    399     Py_complex z;
    400     Py_complex _return_value;
    401 
    402     if (!PyArg_Parse(arg, "D:log10", &z)) {
    403         goto exit;
    404     }
    405     /* modifications for z */
    406     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    407     _return_value = cmath_log10_impl(module, z);
    408     PyFPE_END_PROTECT(_return_value);
    409     if (errno == EDOM) {
    410         PyErr_SetString(PyExc_ValueError, "math domain error");
    411         goto exit;
    412     }
    413     else if (errno == ERANGE) {
    414         PyErr_SetString(PyExc_OverflowError, "math range error");
    415         goto exit;
    416     }
    417     else {
    418         return_value = PyComplex_FromCComplex(_return_value);
    419     }
    420 
    421 exit:
    422     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 cmath_sin(PyObject *module, PyObject *arg)
    439 {
    440     PyObject *return_value = NULL;
    441     Py_complex z;
    442     Py_complex _return_value;
    443 
    444     if (!PyArg_Parse(arg, "D:sin", &z)) {
    445         goto exit;
    446     }
    447     /* modifications for z */
    448     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    449     _return_value = cmath_sin_impl(module, z);
    450     PyFPE_END_PROTECT(_return_value);
    451     if (errno == EDOM) {
    452         PyErr_SetString(PyExc_ValueError, "math domain error");
    453         goto exit;
    454     }
    455     else if (errno == ERANGE) {
    456         PyErr_SetString(PyExc_OverflowError, "math range error");
    457         goto exit;
    458     }
    459     else {
    460         return_value = PyComplex_FromCComplex(_return_value);
    461     }
    462 
    463 exit:
    464     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 cmath_sinh(PyObject *module, PyObject *arg)
    481 {
    482     PyObject *return_value = NULL;
    483     Py_complex z;
    484     Py_complex _return_value;
    485 
    486     if (!PyArg_Parse(arg, "D:sinh", &z)) {
    487         goto exit;
    488     }
    489     /* modifications for z */
    490     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    491     _return_value = cmath_sinh_impl(module, z);
    492     PyFPE_END_PROTECT(_return_value);
    493     if (errno == EDOM) {
    494         PyErr_SetString(PyExc_ValueError, "math domain error");
    495         goto exit;
    496     }
    497     else if (errno == ERANGE) {
    498         PyErr_SetString(PyExc_OverflowError, "math range error");
    499         goto exit;
    500     }
    501     else {
    502         return_value = PyComplex_FromCComplex(_return_value);
    503     }
    504 
    505 exit:
    506     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 cmath_sqrt(PyObject *module, PyObject *arg)
    523 {
    524     PyObject *return_value = NULL;
    525     Py_complex z;
    526     Py_complex _return_value;
    527 
    528     if (!PyArg_Parse(arg, "D:sqrt", &z)) {
    529         goto exit;
    530     }
    531     /* modifications for z */
    532     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    533     _return_value = cmath_sqrt_impl(module, z);
    534     PyFPE_END_PROTECT(_return_value);
    535     if (errno == EDOM) {
    536         PyErr_SetString(PyExc_ValueError, "math domain error");
    537         goto exit;
    538     }
    539     else if (errno == ERANGE) {
    540         PyErr_SetString(PyExc_OverflowError, "math range error");
    541         goto exit;
    542     }
    543     else {
    544         return_value = PyComplex_FromCComplex(_return_value);
    545     }
    546 
    547 exit:
    548     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 cmath_tan(PyObject *module, PyObject *arg)
    565 {
    566     PyObject *return_value = NULL;
    567     Py_complex z;
    568     Py_complex _return_value;
    569 
    570     if (!PyArg_Parse(arg, "D:tan", &z)) {
    571         goto exit;
    572     }
    573     /* modifications for z */
    574     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    575     _return_value = cmath_tan_impl(module, z);
    576     PyFPE_END_PROTECT(_return_value);
    577     if (errno == EDOM) {
    578         PyErr_SetString(PyExc_ValueError, "math domain error");
    579         goto exit;
    580     }
    581     else if (errno == ERANGE) {
    582         PyErr_SetString(PyExc_OverflowError, "math range error");
    583         goto exit;
    584     }
    585     else {
    586         return_value = PyComplex_FromCComplex(_return_value);
    587     }
    588 
    589 exit:
    590     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 cmath_tanh(PyObject *module, PyObject *arg)
    607 {
    608     PyObject *return_value = NULL;
    609     Py_complex z;
    610     Py_complex _return_value;
    611 
    612     if (!PyArg_Parse(arg, "D:tanh", &z)) {
    613         goto exit;
    614     }
    615     /* modifications for z */
    616     errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
    617     _return_value = cmath_tanh_impl(module, z);
    618     PyFPE_END_PROTECT(_return_value);
    619     if (errno == EDOM) {
    620         PyErr_SetString(PyExc_ValueError, "math domain error");
    621         goto exit;
    622     }
    623     else if (errno == ERANGE) {
    624         PyErr_SetString(PyExc_OverflowError, "math range error");
    625         goto exit;
    626     }
    627     else {
    628         return_value = PyComplex_FromCComplex(_return_value);
    629     }
    630 
    631 exit:
    632     return return_value;
    633 }
    634 
    635 PyDoc_STRVAR(cmath_log__doc__,
    636 "log($module, x, y_obj=None, /)\n"
    637 "--\n"
    638 "\n"
    639 "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)cmath_log, METH_VARARGS, cmath_log__doc__},
    645 
    646 static PyObject *
    647 cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj);
    648 
    649 static PyObject *
    650 cmath_log(PyObject *module, PyObject *args)
    651 {
    652     PyObject *return_value = NULL;
    653     Py_complex x;
    654     PyObject *y_obj = NULL;
    655 
    656     if (!PyArg_ParseTuple(args, "D|O:log",
    657         &x, &y_obj)) {
    658         goto exit;
    659     }
    660     return_value = cmath_log_impl(module, x, y_obj);
    661 
    662 exit:
    663     return return_value;
    664 }
    665 
    666 PyDoc_STRVAR(cmath_phase__doc__,
    667 "phase($module, z, /)\n"
    668 "--\n"
    669 "\n"
    670 "Return argument, also known as the phase angle, of a complex.");
    671 
    672 #define CMATH_PHASE_METHODDEF    \
    673     {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__},
    674 
    675 static PyObject *
    676 cmath_phase_impl(PyObject *module, Py_complex z);
    677 
    678 static PyObject *
    679 cmath_phase(PyObject *module, PyObject *arg)
    680 {
    681     PyObject *return_value = NULL;
    682     Py_complex z;
    683 
    684     if (!PyArg_Parse(arg, "D:phase", &z)) {
    685         goto exit;
    686     }
    687     return_value = cmath_phase_impl(module, z);
    688 
    689 exit:
    690     return return_value;
    691 }
    692 
    693 PyDoc_STRVAR(cmath_polar__doc__,
    694 "polar($module, z, /)\n"
    695 "--\n"
    696 "\n"
    697 "Convert a complex from rectangular coordinates to polar coordinates.\n"
    698 "\n"
    699 "r is the distance from 0 and phi the phase angle.");
    700 
    701 #define CMATH_POLAR_METHODDEF    \
    702     {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__},
    703 
    704 static PyObject *
    705 cmath_polar_impl(PyObject *module, Py_complex z);
    706 
    707 static PyObject *
    708 cmath_polar(PyObject *module, PyObject *arg)
    709 {
    710     PyObject *return_value = NULL;
    711     Py_complex z;
    712 
    713     if (!PyArg_Parse(arg, "D:polar", &z)) {
    714         goto exit;
    715     }
    716     return_value = cmath_polar_impl(module, z);
    717 
    718 exit:
    719     return return_value;
    720 }
    721 
    722 PyDoc_STRVAR(cmath_rect__doc__,
    723 "rect($module, r, phi, /)\n"
    724 "--\n"
    725 "\n"
    726 "Convert from polar coordinates to rectangular coordinates.");
    727 
    728 #define CMATH_RECT_METHODDEF    \
    729     {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__},
    730 
    731 static PyObject *
    732 cmath_rect_impl(PyObject *module, double r, double phi);
    733 
    734 static PyObject *
    735 cmath_rect(PyObject *module, PyObject *args)
    736 {
    737     PyObject *return_value = NULL;
    738     double r;
    739     double phi;
    740 
    741     if (!PyArg_ParseTuple(args, "dd:rect",
    742         &r, &phi)) {
    743         goto exit;
    744     }
    745     return_value = cmath_rect_impl(module, r, phi);
    746 
    747 exit:
    748     return return_value;
    749 }
    750 
    751 PyDoc_STRVAR(cmath_isfinite__doc__,
    752 "isfinite($module, z, /)\n"
    753 "--\n"
    754 "\n"
    755 "Return True if both the real and imaginary parts of z are finite, else False.");
    756 
    757 #define CMATH_ISFINITE_METHODDEF    \
    758     {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__},
    759 
    760 static PyObject *
    761 cmath_isfinite_impl(PyObject *module, Py_complex z);
    762 
    763 static PyObject *
    764 cmath_isfinite(PyObject *module, PyObject *arg)
    765 {
    766     PyObject *return_value = NULL;
    767     Py_complex z;
    768 
    769     if (!PyArg_Parse(arg, "D:isfinite", &z)) {
    770         goto exit;
    771     }
    772     return_value = cmath_isfinite_impl(module, z);
    773 
    774 exit:
    775     return return_value;
    776 }
    777 
    778 PyDoc_STRVAR(cmath_isnan__doc__,
    779 "isnan($module, z, /)\n"
    780 "--\n"
    781 "\n"
    782 "Checks if the real or imaginary part of z not a number (NaN).");
    783 
    784 #define CMATH_ISNAN_METHODDEF    \
    785     {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__},
    786 
    787 static PyObject *
    788 cmath_isnan_impl(PyObject *module, Py_complex z);
    789 
    790 static PyObject *
    791 cmath_isnan(PyObject *module, PyObject *arg)
    792 {
    793     PyObject *return_value = NULL;
    794     Py_complex z;
    795 
    796     if (!PyArg_Parse(arg, "D:isnan", &z)) {
    797         goto exit;
    798     }
    799     return_value = cmath_isnan_impl(module, z);
    800 
    801 exit:
    802     return return_value;
    803 }
    804 
    805 PyDoc_STRVAR(cmath_isinf__doc__,
    806 "isinf($module, z, /)\n"
    807 "--\n"
    808 "\n"
    809 "Checks if the real or imaginary part of z is infinite.");
    810 
    811 #define CMATH_ISINF_METHODDEF    \
    812     {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__},
    813 
    814 static PyObject *
    815 cmath_isinf_impl(PyObject *module, Py_complex z);
    816 
    817 static PyObject *
    818 cmath_isinf(PyObject *module, PyObject *arg)
    819 {
    820     PyObject *return_value = NULL;
    821     Py_complex z;
    822 
    823     if (!PyArg_Parse(arg, "D:isinf", &z)) {
    824         goto exit;
    825     }
    826     return_value = cmath_isinf_impl(module, z);
    827 
    828 exit:
    829     return return_value;
    830 }
    831 
    832 PyDoc_STRVAR(cmath_isclose__doc__,
    833 "isclose($module, /, a, b, *, rel_tol=1e-09, abs_tol=0.0)\n"
    834 "--\n"
    835 "\n"
    836 "Determine whether two complex numbers are close in value.\n"
    837 "\n"
    838 "  rel_tol\n"
    839 "    maximum difference for being considered \"close\", relative to the\n"
    840 "    magnitude of the input values\n"
    841 "  abs_tol\n"
    842 "    maximum difference for being considered \"close\", regardless of the\n"
    843 "    magnitude of the input values\n"
    844 "\n"
    845 "Return True if a is close in value to b, and False otherwise.\n"
    846 "\n"
    847 "For the values to be considered close, the difference between them must be\n"
    848 "smaller than at least one of the tolerances.\n"
    849 "\n"
    850 "-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n"
    851 "not close to anything, even itself. inf and -inf are only close to themselves.");
    852 
    853 #define CMATH_ISCLOSE_METHODDEF    \
    854     {"isclose", (PyCFunction)cmath_isclose, METH_FASTCALL, cmath_isclose__doc__},
    855 
    856 static int
    857 cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b,
    858                    double rel_tol, double abs_tol);
    859 
    860 static PyObject *
    861 cmath_isclose(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
    862 {
    863     PyObject *return_value = NULL;
    864     static const char * const _keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL};
    865     static _PyArg_Parser _parser = {"DD|$dd:isclose", _keywords, 0};
    866     Py_complex a;
    867     Py_complex b;
    868     double rel_tol = 1e-09;
    869     double abs_tol = 0.0;
    870     int _return_value;
    871 
    872     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
    873         &a, &b, &rel_tol, &abs_tol)) {
    874         goto exit;
    875     }
    876     _return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol);
    877     if ((_return_value == -1) && PyErr_Occurred()) {
    878         goto exit;
    879     }
    880     return_value = PyBool_FromLong((long)_return_value);
    881 
    882 exit:
    883     return return_value;
    884 }
    885 /*[clinic end generated code: output=978f59702b41655f input=a9049054013a1b77]*/
    886