blob: 30378c7e841b6698a680c8f22433e026cd76d522 [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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030015cmath_acos_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -040016
17static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030018cmath_acos(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +020024 z = PyComplex_AsCComplex(arg);
25 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -040026 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030027 }
Brett Cannonb0fc4902014-10-14 17:37:02 -040028 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030058cmath_acosh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -040059
60static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030061cmath_acosh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +020067 z = PyComplex_AsCComplex(arg);
68 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -040069 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030070 }
Brett Cannonb0fc4902014-10-14 17:37:02 -040071 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300101cmath_asin_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400102
103static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300104cmath_asin(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200110 z = PyComplex_AsCComplex(arg);
111 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400112 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300113 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400114 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300144cmath_asinh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400145
146static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300147cmath_asinh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200153 z = PyComplex_AsCComplex(arg);
154 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400155 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300156 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400157 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300187cmath_atan_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400188
189static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300190cmath_atan(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200196 z = PyComplex_AsCComplex(arg);
197 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400198 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300199 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400200 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300230cmath_atanh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400231
232static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300233cmath_atanh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200239 z = PyComplex_AsCComplex(arg);
240 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400241 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300242 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400243 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300273cmath_cos_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400274
275static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300276cmath_cos(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200282 z = PyComplex_AsCComplex(arg);
283 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400284 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300285 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400286 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300316cmath_cosh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400317
318static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300319cmath_cosh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200325 z = PyComplex_AsCComplex(arg);
326 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400327 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300328 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400329 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300359cmath_exp_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400360
361static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300362cmath_exp(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200368 z = PyComplex_AsCComplex(arg);
369 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400370 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300371 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400372 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300402cmath_log10_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400403
404static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300405cmath_log10(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200411 z = PyComplex_AsCComplex(arg);
412 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400413 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300414 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400415 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300445cmath_sin_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400446
447static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300448cmath_sin(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200454 z = PyComplex_AsCComplex(arg);
455 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400456 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300457 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400458 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300488cmath_sinh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400489
490static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300491cmath_sinh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200497 z = PyComplex_AsCComplex(arg);
498 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400499 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300500 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400501 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300531cmath_sqrt_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400532
533static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300534cmath_sqrt(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200540 z = PyComplex_AsCComplex(arg);
541 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400542 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300543 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400544 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300574cmath_tan_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400575
576static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300577cmath_tan(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200583 z = PyComplex_AsCComplex(arg);
584 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400585 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300586 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400587 /* 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
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300617cmath_tanh_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400618
619static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300620cmath_tanh(PyObject *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 Storchaka32d96a22018-12-25 13:23:47 +0200626 z = PyComplex_AsCComplex(arg);
627 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400628 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300629 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400630 /* 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 \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200659 {"log", (PyCFunction)(void(*)(void))cmath_log, METH_FASTCALL, cmath_log__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400660
661static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300662cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400663
664static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200665cmath_log(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400666{
667 PyObject *return_value = NULL;
668 Py_complex x;
669 PyObject *y_obj = NULL;
670
Sylvain74453812017-06-10 06:51:48 +0200671 if (!_PyArg_ParseStack(args, nargs, "D|O:log",
672 &x, &y_obj)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100673 goto exit;
674 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400675 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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300691cmath_phase_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400692
693static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300694cmath_phase(PyObject *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400695{
696 PyObject *return_value = NULL;
697 Py_complex z;
698
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200699 z = PyComplex_AsCComplex(arg);
700 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400701 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300702 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400703 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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300721cmath_polar_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400722
723static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300724cmath_polar(PyObject *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400725{
726 PyObject *return_value = NULL;
727 Py_complex z;
728
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200729 z = PyComplex_AsCComplex(arg);
730 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400731 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300732 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400733 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 \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200746 {"rect", (PyCFunction)(void(*)(void))cmath_rect, METH_FASTCALL, cmath_rect__doc__},
Brett Cannonb0fc4902014-10-14 17:37:02 -0400747
748static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300749cmath_rect_impl(PyObject *module, double r, double phi);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400750
751static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200752cmath_rect(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400753{
754 PyObject *return_value = NULL;
755 double r;
756 double phi;
757
Sylvain74453812017-06-10 06:51:48 +0200758 if (!_PyArg_ParseStack(args, nargs, "dd:rect",
759 &r, &phi)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100760 goto exit;
761 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400762 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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300778cmath_isfinite_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400779
780static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300781cmath_isfinite(PyObject *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400782{
783 PyObject *return_value = NULL;
784 Py_complex z;
785
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200786 z = PyComplex_AsCComplex(arg);
787 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400788 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300789 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400790 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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300806cmath_isnan_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400807
808static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300809cmath_isnan(PyObject *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400810{
811 PyObject *return_value = NULL;
812 Py_complex z;
813
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200814 z = PyComplex_AsCComplex(arg);
815 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400816 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300817 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400818 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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300834cmath_isinf_impl(PyObject *module, Py_complex z);
Brett Cannonb0fc4902014-10-14 17:37:02 -0400835
836static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300837cmath_isinf(PyObject *module, PyObject *arg)
Brett Cannonb0fc4902014-10-14 17:37:02 -0400838{
839 PyObject *return_value = NULL;
840 Py_complex z;
841
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200842 z = PyComplex_AsCComplex(arg);
843 if (PyErr_Occurred()) {
Brett Cannonb0fc4902014-10-14 17:37:02 -0400844 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300845 }
Brett Cannonb0fc4902014-10-14 17:37:02 -0400846 return_value = cmath_isinf_impl(module, z);
847
848exit:
849 return return_value;
850}
Tal Einatd5519ed2015-05-31 22:05:00 +0300851
852PyDoc_STRVAR(cmath_isclose__doc__,
853"isclose($module, /, a, b, *, rel_tol=1e-09, abs_tol=0.0)\n"
854"--\n"
855"\n"
856"Determine whether two complex numbers are close in value.\n"
857"\n"
858" rel_tol\n"
859" maximum difference for being considered \"close\", relative to the\n"
860" magnitude of the input values\n"
861" abs_tol\n"
862" maximum difference for being considered \"close\", regardless of the\n"
863" magnitude of the input values\n"
864"\n"
865"Return True if a is close in value to b, and False otherwise.\n"
866"\n"
867"For the values to be considered close, the difference between them must be\n"
868"smaller than at least one of the tolerances.\n"
869"\n"
870"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n"
871"not close to anything, even itself. inf and -inf are only close to themselves.");
872
873#define CMATH_ISCLOSE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200874 {"isclose", (PyCFunction)(void(*)(void))cmath_isclose, METH_FASTCALL|METH_KEYWORDS, cmath_isclose__doc__},
Tal Einatd5519ed2015-05-31 22:05:00 +0300875
876static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300877cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b,
Tal Einatd5519ed2015-05-31 22:05:00 +0300878 double rel_tol, double abs_tol);
879
880static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200881cmath_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Tal Einatd5519ed2015-05-31 22:05:00 +0300882{
883 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300884 static const char * const _keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL};
885 static _PyArg_Parser _parser = {"DD|$dd:isclose", _keywords, 0};
Tal Einatd5519ed2015-05-31 22:05:00 +0300886 Py_complex a;
887 Py_complex b;
888 double rel_tol = 1e-09;
889 double abs_tol = 0.0;
890 int _return_value;
891
Victor Stinner3e1fad62017-01-17 01:29:01 +0100892 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300893 &a, &b, &rel_tol, &abs_tol)) {
Tal Einatd5519ed2015-05-31 22:05:00 +0300894 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300895 }
Tal Einatd5519ed2015-05-31 22:05:00 +0300896 _return_value = cmath_isclose_impl(module, a, b, rel_tol, abs_tol);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300897 if ((_return_value == -1) && PyErr_Occurred()) {
Tal Einatd5519ed2015-05-31 22:05:00 +0300898 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300899 }
Tal Einatd5519ed2015-05-31 22:05:00 +0300900 return_value = PyBool_FromLong((long)_return_value);
901
902exit:
903 return return_value;
904}
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200905/*[clinic end generated code: output=50a105aa2bc5308f input=a9049054013a1b77]*/