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