Applying patches backported from 3.1, by Gregor Lingl.
[python.git] / Objects / complexobject.c
blobb976b6de520dcceb7421be5f39a5a05f51d23538
2 /* Complex object implementation */
4 /* Borrows heavily from floatobject.c */
6 /* Submitted by Jim Hugunin */
8 #include "Python.h"
9 #include "structmember.h"
11 #ifdef HAVE_IEEEFP_H
12 #include <ieeefp.h>
13 #endif
15 #ifndef WITHOUT_COMPLEX
17 /* Precisions used by repr() and str(), respectively.
19 The repr() precision (17 significant decimal digits) is the minimal number
20 that is guaranteed to have enough precision so that if the number is read
21 back in the exact same binary value is recreated. This is true for IEEE
22 floating point by design, and also happens to work for all other modern
23 hardware.
25 The str() precision is chosen so that in most cases, the rounding noise
26 created by various operations is suppressed, while giving plenty of
27 precision for practical use.
30 #define PREC_REPR 17
31 #define PREC_STR 12
33 /* elementary operations on complex numbers */
35 static Py_complex c_1 = {1., 0.};
37 Py_complex
38 c_sum(Py_complex a, Py_complex b)
40 Py_complex r;
41 r.real = a.real + b.real;
42 r.imag = a.imag + b.imag;
43 return r;
46 Py_complex
47 c_diff(Py_complex a, Py_complex b)
49 Py_complex r;
50 r.real = a.real - b.real;
51 r.imag = a.imag - b.imag;
52 return r;
55 Py_complex
56 c_neg(Py_complex a)
58 Py_complex r;
59 r.real = -a.real;
60 r.imag = -a.imag;
61 return r;
64 Py_complex
65 c_prod(Py_complex a, Py_complex b)
67 Py_complex r;
68 r.real = a.real*b.real - a.imag*b.imag;
69 r.imag = a.real*b.imag + a.imag*b.real;
70 return r;
73 Py_complex
74 c_quot(Py_complex a, Py_complex b)
76 /******************************************************************
77 This was the original algorithm. It's grossly prone to spurious
78 overflow and underflow errors. It also merrily divides by 0 despite
79 checking for that(!). The code still serves a doc purpose here, as
80 the algorithm following is a simple by-cases transformation of this
81 one:
83 Py_complex r;
84 double d = b.real*b.real + b.imag*b.imag;
85 if (d == 0.)
86 errno = EDOM;
87 r.real = (a.real*b.real + a.imag*b.imag)/d;
88 r.imag = (a.imag*b.real - a.real*b.imag)/d;
89 return r;
90 ******************************************************************/
92 /* This algorithm is better, and is pretty obvious: first divide the
93 * numerators and denominator by whichever of {b.real, b.imag} has
94 * larger magnitude. The earliest reference I found was to CACM
95 * Algorithm 116 (Complex Division, Robert L. Smith, Stanford
96 * University). As usual, though, we're still ignoring all IEEE
97 * endcases.
99 Py_complex r; /* the result */
100 const double abs_breal = b.real < 0 ? -b.real : b.real;
101 const double abs_bimag = b.imag < 0 ? -b.imag : b.imag;
103 if (abs_breal >= abs_bimag) {
104 /* divide tops and bottom by b.real */
105 if (abs_breal == 0.0) {
106 errno = EDOM;
107 r.real = r.imag = 0.0;
109 else {
110 const double ratio = b.imag / b.real;
111 const double denom = b.real + b.imag * ratio;
112 r.real = (a.real + a.imag * ratio) / denom;
113 r.imag = (a.imag - a.real * ratio) / denom;
116 else {
117 /* divide tops and bottom by b.imag */
118 const double ratio = b.real / b.imag;
119 const double denom = b.real * ratio + b.imag;
120 assert(b.imag != 0.0);
121 r.real = (a.real * ratio + a.imag) / denom;
122 r.imag = (a.imag * ratio - a.real) / denom;
124 return r;
127 Py_complex
128 c_pow(Py_complex a, Py_complex b)
130 Py_complex r;
131 double vabs,len,at,phase;
132 if (b.real == 0. && b.imag == 0.) {
133 r.real = 1.;
134 r.imag = 0.;
136 else if (a.real == 0. && a.imag == 0.) {
137 if (b.imag != 0. || b.real < 0.)
138 errno = EDOM;
139 r.real = 0.;
140 r.imag = 0.;
142 else {
143 vabs = hypot(a.real,a.imag);
144 len = pow(vabs,b.real);
145 at = atan2(a.imag, a.real);
146 phase = at*b.real;
147 if (b.imag != 0.0) {
148 len /= exp(at*b.imag);
149 phase += b.imag*log(vabs);
151 r.real = len*cos(phase);
152 r.imag = len*sin(phase);
154 return r;
157 static Py_complex
158 c_powu(Py_complex x, long n)
160 Py_complex r, p;
161 long mask = 1;
162 r = c_1;
163 p = x;
164 while (mask > 0 && n >= mask) {
165 if (n & mask)
166 r = c_prod(r,p);
167 mask <<= 1;
168 p = c_prod(p,p);
170 return r;
173 static Py_complex
174 c_powi(Py_complex x, long n)
176 Py_complex cn;
178 if (n > 100 || n < -100) {
179 cn.real = (double) n;
180 cn.imag = 0.;
181 return c_pow(x,cn);
183 else if (n > 0)
184 return c_powu(x,n);
185 else
186 return c_quot(c_1,c_powu(x,-n));
190 double
191 c_abs(Py_complex z)
193 /* sets errno = ERANGE on overflow; otherwise errno = 0 */
194 double result;
196 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) {
197 /* C99 rules: if either the real or the imaginary part is an
198 infinity, return infinity, even if the other part is a
199 NaN. */
200 if (Py_IS_INFINITY(z.real)) {
201 result = fabs(z.real);
202 errno = 0;
203 return result;
205 if (Py_IS_INFINITY(z.imag)) {
206 result = fabs(z.imag);
207 errno = 0;
208 return result;
210 /* either the real or imaginary part is a NaN,
211 and neither is infinite. Result should be NaN. */
212 return Py_NAN;
214 result = hypot(z.real, z.imag);
215 if (!Py_IS_FINITE(result))
216 errno = ERANGE;
217 else
218 errno = 0;
219 return result;
222 static PyObject *
223 complex_subtype_from_c_complex(PyTypeObject *type, Py_complex cval)
225 PyObject *op;
227 op = type->tp_alloc(type, 0);
228 if (op != NULL)
229 ((PyComplexObject *)op)->cval = cval;
230 return op;
233 PyObject *
234 PyComplex_FromCComplex(Py_complex cval)
236 register PyComplexObject *op;
238 /* Inline PyObject_New */
239 op = (PyComplexObject *) PyObject_MALLOC(sizeof(PyComplexObject));
240 if (op == NULL)
241 return PyErr_NoMemory();
242 PyObject_INIT(op, &PyComplex_Type);
243 op->cval = cval;
244 return (PyObject *) op;
247 static PyObject *
248 complex_subtype_from_doubles(PyTypeObject *type, double real, double imag)
250 Py_complex c;
251 c.real = real;
252 c.imag = imag;
253 return complex_subtype_from_c_complex(type, c);
256 PyObject *
257 PyComplex_FromDoubles(double real, double imag)
259 Py_complex c;
260 c.real = real;
261 c.imag = imag;
262 return PyComplex_FromCComplex(c);
265 double
266 PyComplex_RealAsDouble(PyObject *op)
268 if (PyComplex_Check(op)) {
269 return ((PyComplexObject *)op)->cval.real;
271 else {
272 return PyFloat_AsDouble(op);
276 double
277 PyComplex_ImagAsDouble(PyObject *op)
279 if (PyComplex_Check(op)) {
280 return ((PyComplexObject *)op)->cval.imag;
282 else {
283 return 0.0;
287 Py_complex
288 PyComplex_AsCComplex(PyObject *op)
290 Py_complex cv;
291 PyObject *newop = NULL;
292 static PyObject *complex_str = NULL;
294 assert(op);
295 /* If op is already of type PyComplex_Type, return its value */
296 if (PyComplex_Check(op)) {
297 return ((PyComplexObject *)op)->cval;
299 /* If not, use op's __complex__ method, if it exists */
301 /* return -1 on failure */
302 cv.real = -1.;
303 cv.imag = 0.;
305 if (complex_str == NULL) {
306 if (!(complex_str = PyString_InternFromString("__complex__")))
307 return cv;
310 if (PyInstance_Check(op)) {
311 /* this can go away in python 3000 */
312 if (PyObject_HasAttr(op, complex_str)) {
313 newop = PyObject_CallMethod(op, "__complex__", NULL);
314 if (!newop)
315 return cv;
317 /* else try __float__ */
318 } else {
319 PyObject *complexfunc;
320 complexfunc = _PyType_Lookup(op->ob_type, complex_str);
321 /* complexfunc is a borrowed reference */
322 if (complexfunc) {
323 newop = PyObject_CallFunctionObjArgs(complexfunc, op, NULL);
324 if (!newop)
325 return cv;
329 if (newop) {
330 if (!PyComplex_Check(newop)) {
331 PyErr_SetString(PyExc_TypeError,
332 "__complex__ should return a complex object");
333 Py_DECREF(newop);
334 return cv;
336 cv = ((PyComplexObject *)newop)->cval;
337 Py_DECREF(newop);
338 return cv;
340 /* If neither of the above works, interpret op as a float giving the
341 real part of the result, and fill in the imaginary part as 0. */
342 else {
343 /* PyFloat_AsDouble will return -1 on failure */
344 cv.real = PyFloat_AsDouble(op);
345 return cv;
349 static void
350 complex_dealloc(PyObject *op)
352 op->ob_type->tp_free(op);
356 static PyObject *
357 complex_format(PyComplexObject *v, int precision, char format_code)
359 PyObject *result = NULL;
360 Py_ssize_t len;
362 /* If these are non-NULL, they'll need to be freed. */
363 char *pre = NULL;
364 char *im = NULL;
365 char *buf = NULL;
367 /* These do not need to be freed. re is either an alias
368 for pre or a pointer to a constant. lead and tail
369 are pointers to constants. */
370 char *re = NULL;
371 char *lead = "";
372 char *tail = "";
374 if (v->cval.real == 0. && copysign(1.0, v->cval.real)==1.0) {
375 re = "";
376 im = PyOS_double_to_string(v->cval.imag, format_code,
377 precision, 0, NULL);
378 if (!im) {
379 PyErr_NoMemory();
380 goto done;
382 } else {
383 /* Format imaginary part with sign, real part without */
384 pre = PyOS_double_to_string(v->cval.real, format_code,
385 precision, 0, NULL);
386 if (!pre) {
387 PyErr_NoMemory();
388 goto done;
390 re = pre;
392 im = PyOS_double_to_string(v->cval.imag, format_code,
393 precision, Py_DTSF_SIGN, NULL);
394 if (!im) {
395 PyErr_NoMemory();
396 goto done;
398 lead = "(";
399 tail = ")";
401 /* Alloc the final buffer. Add one for the "j" in the format string,
402 and one for the trailing zero. */
403 len = strlen(lead) + strlen(re) + strlen(im) + strlen(tail) + 2;
404 buf = PyMem_Malloc(len);
405 if (!buf) {
406 PyErr_NoMemory();
407 goto done;
409 PyOS_snprintf(buf, len, "%s%s%sj%s", lead, re, im, tail);
410 result = PyString_FromString(buf);
411 done:
412 PyMem_Free(im);
413 PyMem_Free(pre);
414 PyMem_Free(buf);
416 return result;
419 static int
420 complex_print(PyComplexObject *v, FILE *fp, int flags)
422 PyObject *formatv;
423 char *buf;
424 if (flags & Py_PRINT_RAW)
425 formatv = complex_format(v, PyFloat_STR_PRECISION, 'g');
426 else
427 formatv = complex_format(v, 0, 'r');
428 if (formatv == NULL)
429 return -1;
430 buf = PyString_AS_STRING(formatv);
431 Py_BEGIN_ALLOW_THREADS
432 fputs(buf, fp);
433 Py_END_ALLOW_THREADS
434 Py_DECREF(formatv);
435 return 0;
438 static PyObject *
439 complex_repr(PyComplexObject *v)
441 return complex_format(v, 0, 'r');
444 static PyObject *
445 complex_str(PyComplexObject *v)
447 return complex_format(v, PyFloat_STR_PRECISION, 'g');
450 static long
451 complex_hash(PyComplexObject *v)
453 long hashreal, hashimag, combined;
454 hashreal = _Py_HashDouble(v->cval.real);
455 if (hashreal == -1)
456 return -1;
457 hashimag = _Py_HashDouble(v->cval.imag);
458 if (hashimag == -1)
459 return -1;
460 /* Note: if the imaginary part is 0, hashimag is 0 now,
461 * so the following returns hashreal unchanged. This is
462 * important because numbers of different types that
463 * compare equal must have the same hash value, so that
464 * hash(x + 0*j) must equal hash(x).
466 combined = hashreal + 1000003 * hashimag;
467 if (combined == -1)
468 combined = -2;
469 return combined;
472 /* This macro may return! */
473 #define TO_COMPLEX(obj, c) \
474 if (PyComplex_Check(obj)) \
475 c = ((PyComplexObject *)(obj))->cval; \
476 else if (to_complex(&(obj), &(c)) < 0) \
477 return (obj)
479 static int
480 to_complex(PyObject **pobj, Py_complex *pc)
482 PyObject *obj = *pobj;
484 pc->real = pc->imag = 0.0;
485 if (PyInt_Check(obj)) {
486 pc->real = PyInt_AS_LONG(obj);
487 return 0;
489 if (PyLong_Check(obj)) {
490 pc->real = PyLong_AsDouble(obj);
491 if (pc->real == -1.0 && PyErr_Occurred()) {
492 *pobj = NULL;
493 return -1;
495 return 0;
497 if (PyFloat_Check(obj)) {
498 pc->real = PyFloat_AsDouble(obj);
499 return 0;
501 Py_INCREF(Py_NotImplemented);
502 *pobj = Py_NotImplemented;
503 return -1;
507 static PyObject *
508 complex_add(PyComplexObject *v, PyComplexObject *w)
510 Py_complex result;
511 PyFPE_START_PROTECT("complex_add", return 0)
512 result = c_sum(v->cval,w->cval);
513 PyFPE_END_PROTECT(result)
514 return PyComplex_FromCComplex(result);
517 static PyObject *
518 complex_sub(PyComplexObject *v, PyComplexObject *w)
520 Py_complex result;
521 PyFPE_START_PROTECT("complex_sub", return 0)
522 result = c_diff(v->cval,w->cval);
523 PyFPE_END_PROTECT(result)
524 return PyComplex_FromCComplex(result);
527 static PyObject *
528 complex_mul(PyComplexObject *v, PyComplexObject *w)
530 Py_complex result;
531 PyFPE_START_PROTECT("complex_mul", return 0)
532 result = c_prod(v->cval,w->cval);
533 PyFPE_END_PROTECT(result)
534 return PyComplex_FromCComplex(result);
537 static PyObject *
538 complex_div(PyComplexObject *v, PyComplexObject *w)
540 Py_complex quot;
542 PyFPE_START_PROTECT("complex_div", return 0)
543 errno = 0;
544 quot = c_quot(v->cval,w->cval);
545 PyFPE_END_PROTECT(quot)
546 if (errno == EDOM) {
547 PyErr_SetString(PyExc_ZeroDivisionError, "complex division");
548 return NULL;
550 return PyComplex_FromCComplex(quot);
553 static PyObject *
554 complex_classic_div(PyComplexObject *v, PyComplexObject *w)
556 Py_complex quot;
558 if (Py_DivisionWarningFlag >= 2 &&
559 PyErr_Warn(PyExc_DeprecationWarning,
560 "classic complex division") < 0)
561 return NULL;
563 PyFPE_START_PROTECT("complex_classic_div", return 0)
564 errno = 0;
565 quot = c_quot(v->cval,w->cval);
566 PyFPE_END_PROTECT(quot)
567 if (errno == EDOM) {
568 PyErr_SetString(PyExc_ZeroDivisionError, "complex division");
569 return NULL;
571 return PyComplex_FromCComplex(quot);
574 static PyObject *
575 complex_remainder(PyComplexObject *v, PyComplexObject *w)
577 Py_complex div, mod;
579 if (PyErr_Warn(PyExc_DeprecationWarning,
580 "complex divmod(), // and % are deprecated") < 0)
581 return NULL;
583 errno = 0;
584 div = c_quot(v->cval,w->cval); /* The raw divisor value. */
585 if (errno == EDOM) {
586 PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder");
587 return NULL;
589 div.real = floor(div.real); /* Use the floor of the real part. */
590 div.imag = 0.0;
591 mod = c_diff(v->cval, c_prod(w->cval, div));
593 return PyComplex_FromCComplex(mod);
597 static PyObject *
598 complex_divmod(PyComplexObject *v, PyComplexObject *w)
600 Py_complex div, mod;
601 PyObject *d, *m, *z;
603 if (PyErr_Warn(PyExc_DeprecationWarning,
604 "complex divmod(), // and % are deprecated") < 0)
605 return NULL;
607 errno = 0;
608 div = c_quot(v->cval,w->cval); /* The raw divisor value. */
609 if (errno == EDOM) {
610 PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()");
611 return NULL;
613 div.real = floor(div.real); /* Use the floor of the real part. */
614 div.imag = 0.0;
615 mod = c_diff(v->cval, c_prod(w->cval, div));
616 d = PyComplex_FromCComplex(div);
617 m = PyComplex_FromCComplex(mod);
618 z = PyTuple_Pack(2, d, m);
619 Py_XDECREF(d);
620 Py_XDECREF(m);
621 return z;
624 static PyObject *
625 complex_pow(PyObject *v, PyObject *w, PyObject *z)
627 Py_complex p;
628 Py_complex exponent;
629 long int_exponent;
630 Py_complex a, b;
631 TO_COMPLEX(v, a);
632 TO_COMPLEX(w, b);
634 if (z!=Py_None) {
635 PyErr_SetString(PyExc_ValueError, "complex modulo");
636 return NULL;
638 PyFPE_START_PROTECT("complex_pow", return 0)
639 errno = 0;
640 exponent = b;
641 int_exponent = (long)exponent.real;
642 if (exponent.imag == 0. && exponent.real == int_exponent)
643 p = c_powi(a,int_exponent);
644 else
645 p = c_pow(a,exponent);
647 PyFPE_END_PROTECT(p)
648 Py_ADJUST_ERANGE2(p.real, p.imag);
649 if (errno == EDOM) {
650 PyErr_SetString(PyExc_ZeroDivisionError,
651 "0.0 to a negative or complex power");
652 return NULL;
654 else if (errno == ERANGE) {
655 PyErr_SetString(PyExc_OverflowError,
656 "complex exponentiation");
657 return NULL;
659 return PyComplex_FromCComplex(p);
662 static PyObject *
663 complex_int_div(PyComplexObject *v, PyComplexObject *w)
665 PyObject *t, *r;
667 if (PyErr_Warn(PyExc_DeprecationWarning,
668 "complex divmod(), // and % are deprecated") < 0)
669 return NULL;
671 t = complex_divmod(v, w);
672 if (t != NULL) {
673 r = PyTuple_GET_ITEM(t, 0);
674 Py_INCREF(r);
675 Py_DECREF(t);
676 return r;
678 return NULL;
681 static PyObject *
682 complex_neg(PyComplexObject *v)
684 Py_complex neg;
685 neg.real = -v->cval.real;
686 neg.imag = -v->cval.imag;
687 return PyComplex_FromCComplex(neg);
690 static PyObject *
691 complex_pos(PyComplexObject *v)
693 if (PyComplex_CheckExact(v)) {
694 Py_INCREF(v);
695 return (PyObject *)v;
697 else
698 return PyComplex_FromCComplex(v->cval);
701 static PyObject *
702 complex_abs(PyComplexObject *v)
704 double result;
706 PyFPE_START_PROTECT("complex_abs", return 0)
707 result = c_abs(v->cval);
708 PyFPE_END_PROTECT(result)
710 if (errno == ERANGE) {
711 PyErr_SetString(PyExc_OverflowError,
712 "absolute value too large");
713 return NULL;
715 return PyFloat_FromDouble(result);
718 static int
719 complex_nonzero(PyComplexObject *v)
721 return v->cval.real != 0.0 || v->cval.imag != 0.0;
724 static int
725 complex_coerce(PyObject **pv, PyObject **pw)
727 Py_complex cval;
728 cval.imag = 0.;
729 if (PyInt_Check(*pw)) {
730 cval.real = (double)PyInt_AsLong(*pw);
731 *pw = PyComplex_FromCComplex(cval);
732 Py_INCREF(*pv);
733 return 0;
735 else if (PyLong_Check(*pw)) {
736 cval.real = PyLong_AsDouble(*pw);
737 if (cval.real == -1.0 && PyErr_Occurred())
738 return -1;
739 *pw = PyComplex_FromCComplex(cval);
740 Py_INCREF(*pv);
741 return 0;
743 else if (PyFloat_Check(*pw)) {
744 cval.real = PyFloat_AsDouble(*pw);
745 *pw = PyComplex_FromCComplex(cval);
746 Py_INCREF(*pv);
747 return 0;
749 else if (PyComplex_Check(*pw)) {
750 Py_INCREF(*pv);
751 Py_INCREF(*pw);
752 return 0;
754 return 1; /* Can't do it */
757 static PyObject *
758 complex_richcompare(PyObject *v, PyObject *w, int op)
760 int c;
761 Py_complex i, j;
762 PyObject *res;
764 c = PyNumber_CoerceEx(&v, &w);
765 if (c < 0)
766 return NULL;
767 if (c > 0) {
768 Py_INCREF(Py_NotImplemented);
769 return Py_NotImplemented;
771 /* Make sure both arguments are complex. */
772 if (!(PyComplex_Check(v) && PyComplex_Check(w))) {
773 Py_DECREF(v);
774 Py_DECREF(w);
775 Py_INCREF(Py_NotImplemented);
776 return Py_NotImplemented;
779 i = ((PyComplexObject *)v)->cval;
780 j = ((PyComplexObject *)w)->cval;
781 Py_DECREF(v);
782 Py_DECREF(w);
784 if (op != Py_EQ && op != Py_NE) {
785 PyErr_SetString(PyExc_TypeError,
786 "no ordering relation is defined for complex numbers");
787 return NULL;
790 if ((i.real == j.real && i.imag == j.imag) == (op == Py_EQ))
791 res = Py_True;
792 else
793 res = Py_False;
795 Py_INCREF(res);
796 return res;
799 static PyObject *
800 complex_int(PyObject *v)
802 PyErr_SetString(PyExc_TypeError,
803 "can't convert complex to int");
804 return NULL;
807 static PyObject *
808 complex_long(PyObject *v)
810 PyErr_SetString(PyExc_TypeError,
811 "can't convert complex to long");
812 return NULL;
815 static PyObject *
816 complex_float(PyObject *v)
818 PyErr_SetString(PyExc_TypeError,
819 "can't convert complex to float");
820 return NULL;
823 static PyObject *
824 complex_conjugate(PyObject *self)
826 Py_complex c;
827 c = ((PyComplexObject *)self)->cval;
828 c.imag = -c.imag;
829 return PyComplex_FromCComplex(c);
832 PyDoc_STRVAR(complex_conjugate_doc,
833 "complex.conjugate() -> complex\n"
834 "\n"
835 "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
837 static PyObject *
838 complex_getnewargs(PyComplexObject *v)
840 Py_complex c = v->cval;
841 return Py_BuildValue("(dd)", c.real, c.imag);
844 PyDoc_STRVAR(complex__format__doc,
845 "complex.__format__() -> str\n"
846 "\n"
847 "Converts to a string according to format_spec.");
849 static PyObject *
850 complex__format__(PyObject* self, PyObject* args)
852 PyObject *format_spec;
854 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
855 return NULL;
856 if (PyBytes_Check(format_spec))
857 return _PyComplex_FormatAdvanced(self,
858 PyBytes_AS_STRING(format_spec),
859 PyBytes_GET_SIZE(format_spec));
860 if (PyUnicode_Check(format_spec)) {
861 /* Convert format_spec to a str */
862 PyObject *result;
863 PyObject *str_spec = PyObject_Str(format_spec);
865 if (str_spec == NULL)
866 return NULL;
868 result = _PyComplex_FormatAdvanced(self,
869 PyBytes_AS_STRING(str_spec),
870 PyBytes_GET_SIZE(str_spec));
872 Py_DECREF(str_spec);
873 return result;
875 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
876 return NULL;
879 #if 0
880 static PyObject *
881 complex_is_finite(PyObject *self)
883 Py_complex c;
884 c = ((PyComplexObject *)self)->cval;
885 return PyBool_FromLong((long)(Py_IS_FINITE(c.real) &&
886 Py_IS_FINITE(c.imag)));
889 PyDoc_STRVAR(complex_is_finite_doc,
890 "complex.is_finite() -> bool\n"
891 "\n"
892 "Returns True if the real and the imaginary part is finite.");
893 #endif
895 static PyMethodDef complex_methods[] = {
896 {"conjugate", (PyCFunction)complex_conjugate, METH_NOARGS,
897 complex_conjugate_doc},
898 #if 0
899 {"is_finite", (PyCFunction)complex_is_finite, METH_NOARGS,
900 complex_is_finite_doc},
901 #endif
902 {"__getnewargs__", (PyCFunction)complex_getnewargs, METH_NOARGS},
903 {"__format__", (PyCFunction)complex__format__,
904 METH_VARARGS, complex__format__doc},
905 {NULL, NULL} /* sentinel */
908 static PyMemberDef complex_members[] = {
909 {"real", T_DOUBLE, offsetof(PyComplexObject, cval.real), READONLY,
910 "the real part of a complex number"},
911 {"imag", T_DOUBLE, offsetof(PyComplexObject, cval.imag), READONLY,
912 "the imaginary part of a complex number"},
913 {0},
916 static PyObject *
917 complex_subtype_from_string(PyTypeObject *type, PyObject *v)
919 const char *s, *start;
920 char *end;
921 double x=0.0, y=0.0, z;
922 int got_bracket=0;
923 #ifdef Py_USING_UNICODE
924 char s_buffer[256];
925 #endif
926 Py_ssize_t len;
928 if (PyString_Check(v)) {
929 s = PyString_AS_STRING(v);
930 len = PyString_GET_SIZE(v);
932 #ifdef Py_USING_UNICODE
933 else if (PyUnicode_Check(v)) {
934 if (PyUnicode_GET_SIZE(v) >= (Py_ssize_t)sizeof(s_buffer)) {
935 PyErr_SetString(PyExc_ValueError,
936 "complex() literal too large to convert");
937 return NULL;
939 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
940 PyUnicode_GET_SIZE(v),
941 s_buffer,
942 NULL))
943 return NULL;
944 s = s_buffer;
945 len = strlen(s);
947 #endif
948 else if (PyObject_AsCharBuffer(v, &s, &len)) {
949 PyErr_SetString(PyExc_TypeError,
950 "complex() arg is not a string");
951 return NULL;
954 /* position on first nonblank */
955 start = s;
956 while (Py_ISSPACE(*s))
957 s++;
958 if (*s == '(') {
959 /* Skip over possible bracket from repr(). */
960 got_bracket = 1;
961 s++;
962 while (Py_ISSPACE(*s))
963 s++;
966 /* a valid complex string usually takes one of the three forms:
968 <float> - real part only
969 <float>j - imaginary part only
970 <float><signed-float>j - real and imaginary parts
972 where <float> represents any numeric string that's accepted by the
973 float constructor (including 'nan', 'inf', 'infinity', etc.), and
974 <signed-float> is any string of the form <float> whose first
975 character is '+' or '-'.
977 For backwards compatibility, the extra forms
979 <float><sign>j
980 <sign>j
983 are also accepted, though support for these forms may be removed from
984 a future version of Python.
987 /* first look for forms starting with <float> */
988 errno = 0;
989 z = PyOS_ascii_strtod(s, &end);
990 if (end == s && errno == ENOMEM)
991 return PyErr_NoMemory();
993 if (end != s) {
994 /* all 4 forms starting with <float> land here */
995 s = end;
996 if (*s == '+' || *s == '-') {
997 /* <float><signed-float>j | <float><sign>j */
998 x = z;
999 errno = 0;
1000 y = PyOS_ascii_strtod(s, &end);
1001 if (end == s && errno == ENOMEM)
1002 return PyErr_NoMemory();
1003 if (end != s)
1004 /* <float><signed-float>j */
1005 s = end;
1006 else {
1007 /* <float><sign>j */
1008 y = *s == '+' ? 1.0 : -1.0;
1009 s++;
1011 if (!(*s == 'j' || *s == 'J'))
1012 goto parse_error;
1013 s++;
1015 else if (*s == 'j' || *s == 'J') {
1016 /* <float>j */
1017 s++;
1018 y = z;
1020 else
1021 /* <float> */
1022 x = z;
1024 else {
1025 /* not starting with <float>; must be <sign>j or j */
1026 if (*s == '+' || *s == '-') {
1027 /* <sign>j */
1028 y = *s == '+' ? 1.0 : -1.0;
1029 s++;
1031 else
1032 /* j */
1033 y = 1.0;
1034 if (!(*s == 'j' || *s == 'J'))
1035 goto parse_error;
1036 s++;
1039 /* trailing whitespace and closing bracket */
1040 while (Py_ISSPACE(*s))
1041 s++;
1042 if (got_bracket) {
1043 /* if there was an opening parenthesis, then the corresponding
1044 closing parenthesis should be right here */
1045 if (*s != ')')
1046 goto parse_error;
1047 s++;
1048 while (Py_ISSPACE(*s))
1049 s++;
1052 /* we should now be at the end of the string */
1053 if (s-start != len)
1054 goto parse_error;
1056 return complex_subtype_from_doubles(type, x, y);
1058 parse_error:
1059 PyErr_SetString(PyExc_ValueError,
1060 "complex() arg is a malformed string");
1061 return NULL;
1064 static PyObject *
1065 complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1067 PyObject *r, *i, *tmp, *f;
1068 PyNumberMethods *nbr, *nbi = NULL;
1069 Py_complex cr, ci;
1070 int own_r = 0;
1071 int cr_is_complex = 0;
1072 int ci_is_complex = 0;
1073 static PyObject *complexstr;
1074 static char *kwlist[] = {"real", "imag", 0};
1076 r = Py_False;
1077 i = NULL;
1078 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:complex", kwlist,
1079 &r, &i))
1080 return NULL;
1082 /* Special-case for a single argument when type(arg) is complex. */
1083 if (PyComplex_CheckExact(r) && i == NULL &&
1084 type == &PyComplex_Type) {
1085 /* Note that we can't know whether it's safe to return
1086 a complex *subclass* instance as-is, hence the restriction
1087 to exact complexes here. If either the input or the
1088 output is a complex subclass, it will be handled below
1089 as a non-orthogonal vector. */
1090 Py_INCREF(r);
1091 return r;
1093 if (PyString_Check(r) || PyUnicode_Check(r)) {
1094 if (i != NULL) {
1095 PyErr_SetString(PyExc_TypeError,
1096 "complex() can't take second arg"
1097 " if first is a string");
1098 return NULL;
1100 return complex_subtype_from_string(type, r);
1102 if (i != NULL && (PyString_Check(i) || PyUnicode_Check(i))) {
1103 PyErr_SetString(PyExc_TypeError,
1104 "complex() second arg can't be a string");
1105 return NULL;
1108 /* XXX Hack to support classes with __complex__ method */
1109 if (complexstr == NULL) {
1110 complexstr = PyString_InternFromString("__complex__");
1111 if (complexstr == NULL)
1112 return NULL;
1114 f = PyObject_GetAttr(r, complexstr);
1115 if (f == NULL)
1116 PyErr_Clear();
1117 else {
1118 PyObject *args = PyTuple_New(0);
1119 if (args == NULL)
1120 return NULL;
1121 r = PyEval_CallObject(f, args);
1122 Py_DECREF(args);
1123 Py_DECREF(f);
1124 if (r == NULL)
1125 return NULL;
1126 own_r = 1;
1128 nbr = r->ob_type->tp_as_number;
1129 if (i != NULL)
1130 nbi = i->ob_type->tp_as_number;
1131 if (nbr == NULL || nbr->nb_float == NULL ||
1132 ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
1133 PyErr_SetString(PyExc_TypeError,
1134 "complex() argument must be a string or a number");
1135 if (own_r) {
1136 Py_DECREF(r);
1138 return NULL;
1141 /* If we get this far, then the "real" and "imag" parts should
1142 both be treated as numbers, and the constructor should return a
1143 complex number equal to (real + imag*1j).
1145 Note that we do NOT assume the input to already be in canonical
1146 form; the "real" and "imag" parts might themselves be complex
1147 numbers, which slightly complicates the code below. */
1148 if (PyComplex_Check(r)) {
1149 /* Note that if r is of a complex subtype, we're only
1150 retaining its real & imag parts here, and the return
1151 value is (properly) of the builtin complex type. */
1152 cr = ((PyComplexObject*)r)->cval;
1153 cr_is_complex = 1;
1154 if (own_r) {
1155 Py_DECREF(r);
1158 else {
1159 /* The "real" part really is entirely real, and contributes
1160 nothing in the imaginary direction.
1161 Just treat it as a double. */
1162 tmp = PyNumber_Float(r);
1163 if (own_r) {
1164 /* r was a newly created complex number, rather
1165 than the original "real" argument. */
1166 Py_DECREF(r);
1168 if (tmp == NULL)
1169 return NULL;
1170 if (!PyFloat_Check(tmp)) {
1171 PyErr_SetString(PyExc_TypeError,
1172 "float(r) didn't return a float");
1173 Py_DECREF(tmp);
1174 return NULL;
1176 cr.real = PyFloat_AsDouble(tmp);
1177 cr.imag = 0.0; /* Shut up compiler warning */
1178 Py_DECREF(tmp);
1180 if (i == NULL) {
1181 ci.real = 0.0;
1183 else if (PyComplex_Check(i)) {
1184 ci = ((PyComplexObject*)i)->cval;
1185 ci_is_complex = 1;
1186 } else {
1187 /* The "imag" part really is entirely imaginary, and
1188 contributes nothing in the real direction.
1189 Just treat it as a double. */
1190 tmp = (*nbi->nb_float)(i);
1191 if (tmp == NULL)
1192 return NULL;
1193 ci.real = PyFloat_AsDouble(tmp);
1194 Py_DECREF(tmp);
1196 /* If the input was in canonical form, then the "real" and "imag"
1197 parts are real numbers, so that ci.imag and cr.imag are zero.
1198 We need this correction in case they were not real numbers. */
1200 if (ci_is_complex) {
1201 cr.real -= ci.imag;
1203 if (cr_is_complex) {
1204 ci.real += cr.imag;
1206 return complex_subtype_from_doubles(type, cr.real, ci.real);
1209 PyDoc_STRVAR(complex_doc,
1210 "complex(real[, imag]) -> complex number\n"
1211 "\n"
1212 "Create a complex number from a real part and an optional imaginary part.\n"
1213 "This is equivalent to (real + imag*1j) where imag defaults to 0.");
1215 static PyNumberMethods complex_as_number = {
1216 (binaryfunc)complex_add, /* nb_add */
1217 (binaryfunc)complex_sub, /* nb_subtract */
1218 (binaryfunc)complex_mul, /* nb_multiply */
1219 (binaryfunc)complex_classic_div, /* nb_divide */
1220 (binaryfunc)complex_remainder, /* nb_remainder */
1221 (binaryfunc)complex_divmod, /* nb_divmod */
1222 (ternaryfunc)complex_pow, /* nb_power */
1223 (unaryfunc)complex_neg, /* nb_negative */
1224 (unaryfunc)complex_pos, /* nb_positive */
1225 (unaryfunc)complex_abs, /* nb_absolute */
1226 (inquiry)complex_nonzero, /* nb_nonzero */
1227 0, /* nb_invert */
1228 0, /* nb_lshift */
1229 0, /* nb_rshift */
1230 0, /* nb_and */
1231 0, /* nb_xor */
1232 0, /* nb_or */
1233 complex_coerce, /* nb_coerce */
1234 complex_int, /* nb_int */
1235 complex_long, /* nb_long */
1236 complex_float, /* nb_float */
1237 0, /* nb_oct */
1238 0, /* nb_hex */
1239 0, /* nb_inplace_add */
1240 0, /* nb_inplace_subtract */
1241 0, /* nb_inplace_multiply*/
1242 0, /* nb_inplace_divide */
1243 0, /* nb_inplace_remainder */
1244 0, /* nb_inplace_power */
1245 0, /* nb_inplace_lshift */
1246 0, /* nb_inplace_rshift */
1247 0, /* nb_inplace_and */
1248 0, /* nb_inplace_xor */
1249 0, /* nb_inplace_or */
1250 (binaryfunc)complex_int_div, /* nb_floor_divide */
1251 (binaryfunc)complex_div, /* nb_true_divide */
1252 0, /* nb_inplace_floor_divide */
1253 0, /* nb_inplace_true_divide */
1256 PyTypeObject PyComplex_Type = {
1257 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1258 "complex",
1259 sizeof(PyComplexObject),
1261 complex_dealloc, /* tp_dealloc */
1262 (printfunc)complex_print, /* tp_print */
1263 0, /* tp_getattr */
1264 0, /* tp_setattr */
1265 0, /* tp_compare */
1266 (reprfunc)complex_repr, /* tp_repr */
1267 &complex_as_number, /* tp_as_number */
1268 0, /* tp_as_sequence */
1269 0, /* tp_as_mapping */
1270 (hashfunc)complex_hash, /* tp_hash */
1271 0, /* tp_call */
1272 (reprfunc)complex_str, /* tp_str */
1273 PyObject_GenericGetAttr, /* tp_getattro */
1274 0, /* tp_setattro */
1275 0, /* tp_as_buffer */
1276 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
1277 complex_doc, /* tp_doc */
1278 0, /* tp_traverse */
1279 0, /* tp_clear */
1280 complex_richcompare, /* tp_richcompare */
1281 0, /* tp_weaklistoffset */
1282 0, /* tp_iter */
1283 0, /* tp_iternext */
1284 complex_methods, /* tp_methods */
1285 complex_members, /* tp_members */
1286 0, /* tp_getset */
1287 0, /* tp_base */
1288 0, /* tp_dict */
1289 0, /* tp_descr_get */
1290 0, /* tp_descr_set */
1291 0, /* tp_dictoffset */
1292 0, /* tp_init */
1293 PyType_GenericAlloc, /* tp_alloc */
1294 complex_new, /* tp_new */
1295 PyObject_Del, /* tp_free */
1298 #endif