blob: 4655dbf893ddc97056d0a011055896f52952efd4 [file] [log] [blame]
Brett Cannonb0fc4902014-10-14 17:37:02 -04001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_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 \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030012 {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -040013
14static Py_complex
15cmath_acos_impl(PyModuleDef *module, Py_complex z);
16
17static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030018cmath_acos(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -040019{
20 PyObject *return_value = NULL;
21 Py_complex z;
22 Py_complex _return_value;
23
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030024 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -040025 "D:acos",
26 &z))
27 goto exit;
28 /* modifications for z */
29 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
30 _return_value = cmath_acos_impl(module, z);
31 PyFPE_END_PROTECT(_return_value);
32 if (errno == EDOM) {
33 PyErr_SetString(PyExc_ValueError, "math domain error");
34 goto exit;
35 }
36 else if (errno == ERANGE) {
37 PyErr_SetString(PyExc_OverflowError, "math range error");
38 goto exit;
39 }
40 else {
41 return_value = PyComplex_FromCComplex(_return_value);
42 }
43
44exit:
45 return return_value;
46}
47
48PyDoc_STRVAR(cmath_acosh__doc__,
49"acosh($module, z, /)\n"
50"--\n"
51"\n"
Mark Dickinsoncc8617b2015-01-11 13:22:44 +000052"Return the inverse hyperbolic cosine of z.");
Brett Cannonb0fc4902014-10-14 17:37:02 -040053
54#define CMATH_ACOSH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030055 {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -040056
57static Py_complex
58cmath_acosh_impl(PyModuleDef *module, Py_complex z);
59
60static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030061cmath_acosh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -040062{
63 PyObject *return_value = NULL;
64 Py_complex z;
65 Py_complex _return_value;
66
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030067 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -040068 "D:acosh",
69 &z))
70 goto exit;
71 /* modifications for z */
72 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
73 _return_value = cmath_acosh_impl(module, z);
74 PyFPE_END_PROTECT(_return_value);
75 if (errno == EDOM) {
76 PyErr_SetString(PyExc_ValueError, "math domain error");
77 goto exit;
78 }
79 else if (errno == ERANGE) {
80 PyErr_SetString(PyExc_OverflowError, "math range error");
81 goto exit;
82 }
83 else {
84 return_value = PyComplex_FromCComplex(_return_value);
85 }
86
87exit:
88 return return_value;
89}
90
91PyDoc_STRVAR(cmath_asin__doc__,
92"asin($module, z, /)\n"
93"--\n"
94"\n"
95"Return the arc sine of z.");
96
97#define CMATH_ASIN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030098 {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -040099
100static Py_complex
101cmath_asin_impl(PyModuleDef *module, Py_complex z);
102
103static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300104cmath_asin(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400105{
106 PyObject *return_value = NULL;
107 Py_complex z;
108 Py_complex _return_value;
109
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300110 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400111 "D:asin",
112 &z))
113 goto exit;
114 /* modifications for z */
115 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
116 _return_value = cmath_asin_impl(module, z);
117 PyFPE_END_PROTECT(_return_value);
118 if (errno == EDOM) {
119 PyErr_SetString(PyExc_ValueError, "math domain error");
120 goto exit;
121 }
122 else if (errno == ERANGE) {
123 PyErr_SetString(PyExc_OverflowError, "math range error");
124 goto exit;
125 }
126 else {
127 return_value = PyComplex_FromCComplex(_return_value);
128 }
129
130exit:
131 return return_value;
132}
133
134PyDoc_STRVAR(cmath_asinh__doc__,
135"asinh($module, z, /)\n"
136"--\n"
137"\n"
Mark Dickinsoncc8617b2015-01-11 13:22:44 +0000138"Return the inverse hyperbolic sine of z.");
Brett Cannonb0fc4902014-10-14 17:37:02 -0400139
140#define CMATH_ASINH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300141 {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400142
143static Py_complex
144cmath_asinh_impl(PyModuleDef *module, Py_complex z);
145
146static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300147cmath_asinh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400148{
149 PyObject *return_value = NULL;
150 Py_complex z;
151 Py_complex _return_value;
152
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300153 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400154 "D:asinh",
155 &z))
156 goto exit;
157 /* modifications for z */
158 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
159 _return_value = cmath_asinh_impl(module, z);
160 PyFPE_END_PROTECT(_return_value);
161 if (errno == EDOM) {
162 PyErr_SetString(PyExc_ValueError, "math domain error");
163 goto exit;
164 }
165 else if (errno == ERANGE) {
166 PyErr_SetString(PyExc_OverflowError, "math range error");
167 goto exit;
168 }
169 else {
170 return_value = PyComplex_FromCComplex(_return_value);
171 }
172
173exit:
174 return return_value;
175}
176
177PyDoc_STRVAR(cmath_atan__doc__,
178"atan($module, z, /)\n"
179"--\n"
180"\n"
181"Return the arc tangent of z.");
182
183#define CMATH_ATAN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300184 {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400185
186static Py_complex
187cmath_atan_impl(PyModuleDef *module, Py_complex z);
188
189static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300190cmath_atan(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400191{
192 PyObject *return_value = NULL;
193 Py_complex z;
194 Py_complex _return_value;
195
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300196 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400197 "D:atan",
198 &z))
199 goto exit;
200 /* modifications for z */
201 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
202 _return_value = cmath_atan_impl(module, z);
203 PyFPE_END_PROTECT(_return_value);
204 if (errno == EDOM) {
205 PyErr_SetString(PyExc_ValueError, "math domain error");
206 goto exit;
207 }
208 else if (errno == ERANGE) {
209 PyErr_SetString(PyExc_OverflowError, "math range error");
210 goto exit;
211 }
212 else {
213 return_value = PyComplex_FromCComplex(_return_value);
214 }
215
216exit:
217 return return_value;
218}
219
220PyDoc_STRVAR(cmath_atanh__doc__,
221"atanh($module, z, /)\n"
222"--\n"
223"\n"
Mark Dickinsoncc8617b2015-01-11 13:22:44 +0000224"Return the inverse hyperbolic tangent of z.");
Brett Cannonb0fc4902014-10-14 17:37:02 -0400225
226#define CMATH_ATANH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300227 {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400228
229static Py_complex
230cmath_atanh_impl(PyModuleDef *module, Py_complex z);
231
232static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300233cmath_atanh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400234{
235 PyObject *return_value = NULL;
236 Py_complex z;
237 Py_complex _return_value;
238
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300239 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400240 "D:atanh",
241 &z))
242 goto exit;
243 /* modifications for z */
244 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
245 _return_value = cmath_atanh_impl(module, z);
246 PyFPE_END_PROTECT(_return_value);
247 if (errno == EDOM) {
248 PyErr_SetString(PyExc_ValueError, "math domain error");
249 goto exit;
250 }
251 else if (errno == ERANGE) {
252 PyErr_SetString(PyExc_OverflowError, "math range error");
253 goto exit;
254 }
255 else {
256 return_value = PyComplex_FromCComplex(_return_value);
257 }
258
259exit:
260 return return_value;
261}
262
263PyDoc_STRVAR(cmath_cos__doc__,
264"cos($module, z, /)\n"
265"--\n"
266"\n"
267"Return the cosine of z.");
268
269#define CMATH_COS_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300270 {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400271
272static Py_complex
273cmath_cos_impl(PyModuleDef *module, Py_complex z);
274
275static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300276cmath_cos(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400277{
278 PyObject *return_value = NULL;
279 Py_complex z;
280 Py_complex _return_value;
281
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300282 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400283 "D:cos",
284 &z))
285 goto exit;
286 /* modifications for z */
287 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
288 _return_value = cmath_cos_impl(module, z);
289 PyFPE_END_PROTECT(_return_value);
290 if (errno == EDOM) {
291 PyErr_SetString(PyExc_ValueError, "math domain error");
292 goto exit;
293 }
294 else if (errno == ERANGE) {
295 PyErr_SetString(PyExc_OverflowError, "math range error");
296 goto exit;
297 }
298 else {
299 return_value = PyComplex_FromCComplex(_return_value);
300 }
301
302exit:
303 return return_value;
304}
305
306PyDoc_STRVAR(cmath_cosh__doc__,
307"cosh($module, z, /)\n"
308"--\n"
309"\n"
310"Return the hyperbolic cosine of z.");
311
312#define CMATH_COSH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300313 {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400314
315static Py_complex
316cmath_cosh_impl(PyModuleDef *module, Py_complex z);
317
318static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300319cmath_cosh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400320{
321 PyObject *return_value = NULL;
322 Py_complex z;
323 Py_complex _return_value;
324
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300325 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400326 "D:cosh",
327 &z))
328 goto exit;
329 /* modifications for z */
330 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
331 _return_value = cmath_cosh_impl(module, z);
332 PyFPE_END_PROTECT(_return_value);
333 if (errno == EDOM) {
334 PyErr_SetString(PyExc_ValueError, "math domain error");
335 goto exit;
336 }
337 else if (errno == ERANGE) {
338 PyErr_SetString(PyExc_OverflowError, "math range error");
339 goto exit;
340 }
341 else {
342 return_value = PyComplex_FromCComplex(_return_value);
343 }
344
345exit:
346 return return_value;
347}
348
349PyDoc_STRVAR(cmath_exp__doc__,
350"exp($module, z, /)\n"
351"--\n"
352"\n"
353"Return the exponential value e**z.");
354
355#define CMATH_EXP_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300356 {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400357
358static Py_complex
359cmath_exp_impl(PyModuleDef *module, Py_complex z);
360
361static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300362cmath_exp(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400363{
364 PyObject *return_value = NULL;
365 Py_complex z;
366 Py_complex _return_value;
367
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300368 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400369 "D:exp",
370 &z))
371 goto exit;
372 /* modifications for z */
373 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
374 _return_value = cmath_exp_impl(module, z);
375 PyFPE_END_PROTECT(_return_value);
376 if (errno == EDOM) {
377 PyErr_SetString(PyExc_ValueError, "math domain error");
378 goto exit;
379 }
380 else if (errno == ERANGE) {
381 PyErr_SetString(PyExc_OverflowError, "math range error");
382 goto exit;
383 }
384 else {
385 return_value = PyComplex_FromCComplex(_return_value);
386 }
387
388exit:
389 return return_value;
390}
391
392PyDoc_STRVAR(cmath_log10__doc__,
393"log10($module, z, /)\n"
394"--\n"
395"\n"
396"Return the base-10 logarithm of z.");
397
398#define CMATH_LOG10_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300399 {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400400
401static Py_complex
402cmath_log10_impl(PyModuleDef *module, Py_complex z);
403
404static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300405cmath_log10(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400406{
407 PyObject *return_value = NULL;
408 Py_complex z;
409 Py_complex _return_value;
410
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300411 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400412 "D:log10",
413 &z))
414 goto exit;
415 /* modifications for z */
416 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
417 _return_value = cmath_log10_impl(module, z);
418 PyFPE_END_PROTECT(_return_value);
419 if (errno == EDOM) {
420 PyErr_SetString(PyExc_ValueError, "math domain error");
421 goto exit;
422 }
423 else if (errno == ERANGE) {
424 PyErr_SetString(PyExc_OverflowError, "math range error");
425 goto exit;
426 }
427 else {
428 return_value = PyComplex_FromCComplex(_return_value);
429 }
430
431exit:
432 return return_value;
433}
434
435PyDoc_STRVAR(cmath_sin__doc__,
436"sin($module, z, /)\n"
437"--\n"
438"\n"
439"Return the sine of z.");
440
441#define CMATH_SIN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300442 {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400443
444static Py_complex
445cmath_sin_impl(PyModuleDef *module, Py_complex z);
446
447static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300448cmath_sin(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400449{
450 PyObject *return_value = NULL;
451 Py_complex z;
452 Py_complex _return_value;
453
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300454 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400455 "D:sin",
456 &z))
457 goto exit;
458 /* modifications for z */
459 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
460 _return_value = cmath_sin_impl(module, z);
461 PyFPE_END_PROTECT(_return_value);
462 if (errno == EDOM) {
463 PyErr_SetString(PyExc_ValueError, "math domain error");
464 goto exit;
465 }
466 else if (errno == ERANGE) {
467 PyErr_SetString(PyExc_OverflowError, "math range error");
468 goto exit;
469 }
470 else {
471 return_value = PyComplex_FromCComplex(_return_value);
472 }
473
474exit:
475 return return_value;
476}
477
478PyDoc_STRVAR(cmath_sinh__doc__,
479"sinh($module, z, /)\n"
480"--\n"
481"\n"
482"Return the hyperbolic sine of z.");
483
484#define CMATH_SINH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300485 {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400486
487static Py_complex
488cmath_sinh_impl(PyModuleDef *module, Py_complex z);
489
490static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300491cmath_sinh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400492{
493 PyObject *return_value = NULL;
494 Py_complex z;
495 Py_complex _return_value;
496
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300497 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400498 "D:sinh",
499 &z))
500 goto exit;
501 /* modifications for z */
502 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
503 _return_value = cmath_sinh_impl(module, z);
504 PyFPE_END_PROTECT(_return_value);
505 if (errno == EDOM) {
506 PyErr_SetString(PyExc_ValueError, "math domain error");
507 goto exit;
508 }
509 else if (errno == ERANGE) {
510 PyErr_SetString(PyExc_OverflowError, "math range error");
511 goto exit;
512 }
513 else {
514 return_value = PyComplex_FromCComplex(_return_value);
515 }
516
517exit:
518 return return_value;
519}
520
521PyDoc_STRVAR(cmath_sqrt__doc__,
522"sqrt($module, z, /)\n"
523"--\n"
524"\n"
525"Return the square root of z.");
526
527#define CMATH_SQRT_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300528 {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400529
530static Py_complex
531cmath_sqrt_impl(PyModuleDef *module, Py_complex z);
532
533static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300534cmath_sqrt(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400535{
536 PyObject *return_value = NULL;
537 Py_complex z;
538 Py_complex _return_value;
539
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300540 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400541 "D:sqrt",
542 &z))
543 goto exit;
544 /* modifications for z */
545 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
546 _return_value = cmath_sqrt_impl(module, z);
547 PyFPE_END_PROTECT(_return_value);
548 if (errno == EDOM) {
549 PyErr_SetString(PyExc_ValueError, "math domain error");
550 goto exit;
551 }
552 else if (errno == ERANGE) {
553 PyErr_SetString(PyExc_OverflowError, "math range error");
554 goto exit;
555 }
556 else {
557 return_value = PyComplex_FromCComplex(_return_value);
558 }
559
560exit:
561 return return_value;
562}
563
564PyDoc_STRVAR(cmath_tan__doc__,
565"tan($module, z, /)\n"
566"--\n"
567"\n"
568"Return the tangent of z.");
569
570#define CMATH_TAN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300571 {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400572
573static Py_complex
574cmath_tan_impl(PyModuleDef *module, Py_complex z);
575
576static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300577cmath_tan(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400578{
579 PyObject *return_value = NULL;
580 Py_complex z;
581 Py_complex _return_value;
582
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300583 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400584 "D:tan",
585 &z))
586 goto exit;
587 /* modifications for z */
588 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
589 _return_value = cmath_tan_impl(module, z);
590 PyFPE_END_PROTECT(_return_value);
591 if (errno == EDOM) {
592 PyErr_SetString(PyExc_ValueError, "math domain error");
593 goto exit;
594 }
595 else if (errno == ERANGE) {
596 PyErr_SetString(PyExc_OverflowError, "math range error");
597 goto exit;
598 }
599 else {
600 return_value = PyComplex_FromCComplex(_return_value);
601 }
602
603exit:
604 return return_value;
605}
606
607PyDoc_STRVAR(cmath_tanh__doc__,
608"tanh($module, z, /)\n"
609"--\n"
610"\n"
611"Return the hyperbolic tangent of z.");
612
613#define CMATH_TANH_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300614 {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400615
616static Py_complex
617cmath_tanh_impl(PyModuleDef *module, Py_complex z);
618
619static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300620cmath_tanh(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400621{
622 PyObject *return_value = NULL;
623 Py_complex z;
624 Py_complex _return_value;
625
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300626 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400627 "D:tanh",
628 &z))
629 goto exit;
630 /* modifications for z */
631 errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
632 _return_value = cmath_tanh_impl(module, z);
633 PyFPE_END_PROTECT(_return_value);
634 if (errno == EDOM) {
635 PyErr_SetString(PyExc_ValueError, "math domain error");
636 goto exit;
637 }
638 else if (errno == ERANGE) {
639 PyErr_SetString(PyExc_OverflowError, "math range error");
640 goto exit;
641 }
642 else {
643 return_value = PyComplex_FromCComplex(_return_value);
644 }
645
646exit:
647 return return_value;
648}
649
650PyDoc_STRVAR(cmath_log__doc__,
651"log($module, x, y_obj=None, /)\n"
652"--\n"
653"\n"
654"The logarithm of z to the given base.\n"
655"\n"
656"If the base not specified, returns the natural logarithm (base e) of z.");
657
658#define CMATH_LOG_METHODDEF \
659 {"log", (PyCFunction)cmath_log, METH_VARARGS, cmath_log__doc__},
660
661static PyObject *
662cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj);
663
664static PyObject *
665cmath_log(PyModuleDef *module, PyObject *args)
666{
667 PyObject *return_value = NULL;
668 Py_complex x;
669 PyObject *y_obj = NULL;
670
671 if (!PyArg_ParseTuple(args,
672 "D|O:log",
673 &x, &y_obj))
674 goto exit;
675 return_value = cmath_log_impl(module, x, y_obj);
676
677exit:
678 return return_value;
679}
680
681PyDoc_STRVAR(cmath_phase__doc__,
682"phase($module, z, /)\n"
683"--\n"
684"\n"
685"Return argument, also known as the phase angle, of a complex.");
686
687#define CMATH_PHASE_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300688 {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400689
690static PyObject *
691cmath_phase_impl(PyModuleDef *module, Py_complex z);
692
693static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300694cmath_phase(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400695{
696 PyObject *return_value = NULL;
697 Py_complex z;
698
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300699 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400700 "D:phase",
701 &z))
702 goto exit;
703 return_value = cmath_phase_impl(module, z);
704
705exit:
706 return return_value;
707}
708
709PyDoc_STRVAR(cmath_polar__doc__,
710"polar($module, z, /)\n"
711"--\n"
712"\n"
713"Convert a complex from rectangular coordinates to polar coordinates.\n"
714"\n"
715"r is the distance from 0 and phi the phase angle.");
716
717#define CMATH_POLAR_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300718 {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400719
720static PyObject *
721cmath_polar_impl(PyModuleDef *module, Py_complex z);
722
723static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300724cmath_polar(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400725{
726 PyObject *return_value = NULL;
727 Py_complex z;
728
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300729 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400730 "D:polar",
731 &z))
732 goto exit;
733 return_value = cmath_polar_impl(module, z);
734
735exit:
736 return return_value;
737}
738
739PyDoc_STRVAR(cmath_rect__doc__,
740"rect($module, r, phi, /)\n"
741"--\n"
742"\n"
743"Convert from polar coordinates to rectangular coordinates.");
744
745#define CMATH_RECT_METHODDEF \
746 {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__},
747
748static PyObject *
749cmath_rect_impl(PyModuleDef *module, double r, double phi);
750
751static PyObject *
752cmath_rect(PyModuleDef *module, PyObject *args)
753{
754 PyObject *return_value = NULL;
755 double r;
756 double phi;
757
758 if (!PyArg_ParseTuple(args,
759 "dd:rect",
760 &r, &phi))
761 goto exit;
762 return_value = cmath_rect_impl(module, r, phi);
763
764exit:
765 return return_value;
766}
767
768PyDoc_STRVAR(cmath_isfinite__doc__,
769"isfinite($module, z, /)\n"
770"--\n"
771"\n"
772"Return True if both the real and imaginary parts of z are finite, else False.");
773
774#define CMATH_ISFINITE_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300775 {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400776
777static PyObject *
778cmath_isfinite_impl(PyModuleDef *module, Py_complex z);
779
780static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300781cmath_isfinite(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400782{
783 PyObject *return_value = NULL;
784 Py_complex z;
785
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300786 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400787 "D:isfinite",
788 &z))
789 goto exit;
790 return_value = cmath_isfinite_impl(module, z);
791
792exit:
793 return return_value;
794}
795
796PyDoc_STRVAR(cmath_isnan__doc__,
797"isnan($module, z, /)\n"
798"--\n"
799"\n"
800"Checks if the real or imaginary part of z not a number (NaN).");
801
802#define CMATH_ISNAN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300803 {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400804
805static PyObject *
806cmath_isnan_impl(PyModuleDef *module, Py_complex z);
807
808static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300809cmath_isnan(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400810{
811 PyObject *return_value = NULL;
812 Py_complex z;
813
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300814 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400815 "D:isnan",
816 &z))
817 goto exit;
818 return_value = cmath_isnan_impl(module, z);
819
820exit:
821 return return_value;
822}
823
824PyDoc_STRVAR(cmath_isinf__doc__,
825"isinf($module, z, /)\n"
826"--\n"
827"\n"
828"Checks if the real or imaginary part of z is infinite.");
829
830#define CMATH_ISINF_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300831 {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400832
833static PyObject *
834cmath_isinf_impl(PyModuleDef *module, Py_complex z);
835
836static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300837cmath_isinf(PyModuleDef *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400838{
839 PyObject *return_value = NULL;
840 Py_complex z;
841
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300842 if (!PyArg_Parse(arg,
Brett Cannonb0fc4902014-10-14 17:37:02 -0400843 "D:isinf",
844 &z))
845 goto exit;
846 return_value = cmath_isinf_impl(module, z);
847
848exit:
849 return return_value;
850}
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300851/*[clinic end generated code: output=9143b8dcc8069024 input=a9049054013a1b77]*/