2 /* Complex object implementation */
4 /* Borrows heavily from floatobject.c */
6 /* Submitted by Jim Hugunin */
9 #include "structmember.h"
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
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.
33 /* elementary operations on complex numbers */
35 static Py_complex c_1
= {1., 0.};
38 c_sum(Py_complex a
, Py_complex b
)
41 r
.real
= a
.real
+ b
.real
;
42 r
.imag
= a
.imag
+ b
.imag
;
47 c_diff(Py_complex a
, Py_complex b
)
50 r
.real
= a
.real
- b
.real
;
51 r
.imag
= a
.imag
- b
.imag
;
65 c_prod(Py_complex a
, Py_complex b
)
68 r
.real
= a
.real
*b
.real
- a
.imag
*b
.imag
;
69 r
.imag
= a
.real
*b
.imag
+ a
.imag
*b
.real
;
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
84 double d = b.real*b.real + b.imag*b.imag;
87 r.real = (a.real*b.real + a.imag*b.imag)/d;
88 r.imag = (a.imag*b.real - a.real*b.imag)/d;
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
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) {
107 r
.real
= r
.imag
= 0.0;
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
;
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
;
128 c_pow(Py_complex a
, Py_complex b
)
131 double vabs
,len
,at
,phase
;
132 if (b
.real
== 0. && b
.imag
== 0.) {
136 else if (a
.real
== 0. && a
.imag
== 0.) {
137 if (b
.imag
!= 0. || b
.real
< 0.)
143 vabs
= hypot(a
.real
,a
.imag
);
144 len
= pow(vabs
,b
.real
);
145 at
= atan2(a
.imag
, a
.real
);
148 len
/= exp(at
*b
.imag
);
149 phase
+= b
.imag
*log(vabs
);
151 r
.real
= len
*cos(phase
);
152 r
.imag
= len
*sin(phase
);
158 c_powu(Py_complex x
, long n
)
164 while (mask
> 0 && n
>= mask
) {
174 c_powi(Py_complex x
, long n
)
178 if (n
> 100 || n
< -100) {
179 cn
.real
= (double) n
;
186 return c_quot(c_1
,c_powu(x
,-n
));
193 /* sets errno = ERANGE on overflow; otherwise errno = 0 */
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
200 if (Py_IS_INFINITY(z
.real
)) {
201 result
= fabs(z
.real
);
205 if (Py_IS_INFINITY(z
.imag
)) {
206 result
= fabs(z
.imag
);
210 /* either the real or imaginary part is a NaN,
211 and neither is infinite. Result should be NaN. */
214 result
= hypot(z
.real
, z
.imag
);
215 if (!Py_IS_FINITE(result
))
223 complex_subtype_from_c_complex(PyTypeObject
*type
, Py_complex cval
)
227 op
= type
->tp_alloc(type
, 0);
229 ((PyComplexObject
*)op
)->cval
= cval
;
234 PyComplex_FromCComplex(Py_complex cval
)
236 register PyComplexObject
*op
;
238 /* Inline PyObject_New */
239 op
= (PyComplexObject
*) PyObject_MALLOC(sizeof(PyComplexObject
));
241 return PyErr_NoMemory();
242 PyObject_INIT(op
, &PyComplex_Type
);
244 return (PyObject
*) op
;
248 complex_subtype_from_doubles(PyTypeObject
*type
, double real
, double imag
)
253 return complex_subtype_from_c_complex(type
, c
);
257 PyComplex_FromDoubles(double real
, double imag
)
262 return PyComplex_FromCComplex(c
);
266 PyComplex_RealAsDouble(PyObject
*op
)
268 if (PyComplex_Check(op
)) {
269 return ((PyComplexObject
*)op
)->cval
.real
;
272 return PyFloat_AsDouble(op
);
277 PyComplex_ImagAsDouble(PyObject
*op
)
279 if (PyComplex_Check(op
)) {
280 return ((PyComplexObject
*)op
)->cval
.imag
;
288 PyComplex_AsCComplex(PyObject
*op
)
291 PyObject
*newop
= NULL
;
292 static PyObject
*complex_str
= NULL
;
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 */
305 if (complex_str
== NULL
) {
306 if (!(complex_str
= PyString_InternFromString("__complex__")))
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
);
317 /* else try __float__ */
319 PyObject
*complexfunc
;
320 complexfunc
= _PyType_Lookup(op
->ob_type
, complex_str
);
321 /* complexfunc is a borrowed reference */
323 newop
= PyObject_CallFunctionObjArgs(complexfunc
, op
, NULL
);
330 if (!PyComplex_Check(newop
)) {
331 PyErr_SetString(PyExc_TypeError
,
332 "__complex__ should return a complex object");
336 cv
= ((PyComplexObject
*)newop
)->cval
;
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. */
343 /* PyFloat_AsDouble will return -1 on failure */
344 cv
.real
= PyFloat_AsDouble(op
);
350 complex_dealloc(PyObject
*op
)
352 op
->ob_type
->tp_free(op
);
357 complex_to_buf(char *buf
, int bufsz
, PyComplexObject
*v
, int precision
)
360 if (v
->cval
.real
== 0.) {
361 if (!Py_IS_FINITE(v
->cval
.imag
)) {
362 if (Py_IS_NAN(v
->cval
.imag
))
363 strncpy(buf
, "nan*j", 6);
364 else if (copysign(1, v
->cval
.imag
) == 1)
365 strncpy(buf
, "inf*j", 6);
367 strncpy(buf
, "-inf*j", 7);
370 PyOS_snprintf(format
, sizeof(format
), "%%.%ig", precision
);
371 PyOS_ascii_formatd(buf
, bufsz
- 1, format
, v
->cval
.imag
);
372 strncat(buf
, "j", 1);
376 /* Format imaginary part with sign, real part without */
377 if (!Py_IS_FINITE(v
->cval
.real
)) {
378 if (Py_IS_NAN(v
->cval
.real
))
379 strncpy(re
, "nan", 4);
380 /* else if (copysign(1, v->cval.real) == 1) */
381 else if (v
->cval
.real
> 0)
382 strncpy(re
, "inf", 4);
384 strncpy(re
, "-inf", 5);
387 PyOS_snprintf(format
, sizeof(format
), "%%.%ig", precision
);
388 PyOS_ascii_formatd(re
, sizeof(re
), format
, v
->cval
.real
);
390 if (!Py_IS_FINITE(v
->cval
.imag
)) {
391 if (Py_IS_NAN(v
->cval
.imag
))
392 strncpy(im
, "+nan*", 6);
393 /* else if (copysign(1, v->cval.imag) == 1) */
394 else if (v
->cval
.imag
> 0)
395 strncpy(im
, "+inf*", 6);
397 strncpy(im
, "-inf*", 6);
400 PyOS_snprintf(format
, sizeof(format
), "%%+.%ig", precision
);
401 PyOS_ascii_formatd(im
, sizeof(im
), format
, v
->cval
.imag
);
403 PyOS_snprintf(buf
, bufsz
, "(%s%sj)", re
, im
);
408 complex_print(PyComplexObject
*v
, FILE *fp
, int flags
)
411 complex_to_buf(buf
, sizeof(buf
), v
,
412 (flags
& Py_PRINT_RAW
) ? PREC_STR
: PREC_REPR
);
413 Py_BEGIN_ALLOW_THREADS
420 complex_repr(PyComplexObject
*v
)
423 complex_to_buf(buf
, sizeof(buf
), v
, PREC_REPR
);
424 return PyString_FromString(buf
);
428 complex_str(PyComplexObject
*v
)
431 complex_to_buf(buf
, sizeof(buf
), v
, PREC_STR
);
432 return PyString_FromString(buf
);
436 complex_hash(PyComplexObject
*v
)
438 long hashreal
, hashimag
, combined
;
439 hashreal
= _Py_HashDouble(v
->cval
.real
);
442 hashimag
= _Py_HashDouble(v
->cval
.imag
);
445 /* Note: if the imaginary part is 0, hashimag is 0 now,
446 * so the following returns hashreal unchanged. This is
447 * important because numbers of different types that
448 * compare equal must have the same hash value, so that
449 * hash(x + 0*j) must equal hash(x).
451 combined
= hashreal
+ 1000003 * hashimag
;
457 /* This macro may return! */
458 #define TO_COMPLEX(obj, c) \
459 if (PyComplex_Check(obj)) \
460 c = ((PyComplexObject *)(obj))->cval; \
461 else if (to_complex(&(obj), &(c)) < 0) \
465 to_complex(PyObject
**pobj
, Py_complex
*pc
)
467 PyObject
*obj
= *pobj
;
469 pc
->real
= pc
->imag
= 0.0;
470 if (PyInt_Check(obj
)) {
471 pc
->real
= PyInt_AS_LONG(obj
);
474 if (PyLong_Check(obj
)) {
475 pc
->real
= PyLong_AsDouble(obj
);
476 if (pc
->real
== -1.0 && PyErr_Occurred()) {
482 if (PyFloat_Check(obj
)) {
483 pc
->real
= PyFloat_AsDouble(obj
);
486 Py_INCREF(Py_NotImplemented
);
487 *pobj
= Py_NotImplemented
;
493 complex_add(PyComplexObject
*v
, PyComplexObject
*w
)
496 PyFPE_START_PROTECT("complex_add", return 0)
497 result
= c_sum(v
->cval
,w
->cval
);
498 PyFPE_END_PROTECT(result
)
499 return PyComplex_FromCComplex(result
);
503 complex_sub(PyComplexObject
*v
, PyComplexObject
*w
)
506 PyFPE_START_PROTECT("complex_sub", return 0)
507 result
= c_diff(v
->cval
,w
->cval
);
508 PyFPE_END_PROTECT(result
)
509 return PyComplex_FromCComplex(result
);
513 complex_mul(PyComplexObject
*v
, PyComplexObject
*w
)
516 PyFPE_START_PROTECT("complex_mul", return 0)
517 result
= c_prod(v
->cval
,w
->cval
);
518 PyFPE_END_PROTECT(result
)
519 return PyComplex_FromCComplex(result
);
523 complex_div(PyComplexObject
*v
, PyComplexObject
*w
)
527 PyFPE_START_PROTECT("complex_div", return 0)
529 quot
= c_quot(v
->cval
,w
->cval
);
530 PyFPE_END_PROTECT(quot
)
532 PyErr_SetString(PyExc_ZeroDivisionError
, "complex division");
535 return PyComplex_FromCComplex(quot
);
539 complex_classic_div(PyComplexObject
*v
, PyComplexObject
*w
)
543 if (Py_DivisionWarningFlag
>= 2 &&
544 PyErr_Warn(PyExc_DeprecationWarning
,
545 "classic complex division") < 0)
548 PyFPE_START_PROTECT("complex_classic_div", return 0)
550 quot
= c_quot(v
->cval
,w
->cval
);
551 PyFPE_END_PROTECT(quot
)
553 PyErr_SetString(PyExc_ZeroDivisionError
, "complex division");
556 return PyComplex_FromCComplex(quot
);
560 complex_remainder(PyComplexObject
*v
, PyComplexObject
*w
)
564 if (PyErr_Warn(PyExc_DeprecationWarning
,
565 "complex divmod(), // and % are deprecated") < 0)
569 div
= c_quot(v
->cval
,w
->cval
); /* The raw divisor value. */
571 PyErr_SetString(PyExc_ZeroDivisionError
, "complex remainder");
574 div
.real
= floor(div
.real
); /* Use the floor of the real part. */
576 mod
= c_diff(v
->cval
, c_prod(w
->cval
, div
));
578 return PyComplex_FromCComplex(mod
);
583 complex_divmod(PyComplexObject
*v
, PyComplexObject
*w
)
588 if (PyErr_Warn(PyExc_DeprecationWarning
,
589 "complex divmod(), // and % are deprecated") < 0)
593 div
= c_quot(v
->cval
,w
->cval
); /* The raw divisor value. */
595 PyErr_SetString(PyExc_ZeroDivisionError
, "complex divmod()");
598 div
.real
= floor(div
.real
); /* Use the floor of the real part. */
600 mod
= c_diff(v
->cval
, c_prod(w
->cval
, div
));
601 d
= PyComplex_FromCComplex(div
);
602 m
= PyComplex_FromCComplex(mod
);
603 z
= PyTuple_Pack(2, d
, m
);
610 complex_pow(PyObject
*v
, PyObject
*w
, PyObject
*z
)
620 PyErr_SetString(PyExc_ValueError
, "complex modulo");
623 PyFPE_START_PROTECT("complex_pow", return 0)
626 int_exponent
= (long)exponent
.real
;
627 if (exponent
.imag
== 0. && exponent
.real
== int_exponent
)
628 p
= c_powi(a
,int_exponent
);
630 p
= c_pow(a
,exponent
);
633 Py_ADJUST_ERANGE2(p
.real
, p
.imag
);
635 PyErr_SetString(PyExc_ZeroDivisionError
,
636 "0.0 to a negative or complex power");
639 else if (errno
== ERANGE
) {
640 PyErr_SetString(PyExc_OverflowError
,
641 "complex exponentiation");
644 return PyComplex_FromCComplex(p
);
648 complex_int_div(PyComplexObject
*v
, PyComplexObject
*w
)
652 if (PyErr_Warn(PyExc_DeprecationWarning
,
653 "complex divmod(), // and % are deprecated") < 0)
656 t
= complex_divmod(v
, w
);
658 r
= PyTuple_GET_ITEM(t
, 0);
667 complex_neg(PyComplexObject
*v
)
670 neg
.real
= -v
->cval
.real
;
671 neg
.imag
= -v
->cval
.imag
;
672 return PyComplex_FromCComplex(neg
);
676 complex_pos(PyComplexObject
*v
)
678 if (PyComplex_CheckExact(v
)) {
680 return (PyObject
*)v
;
683 return PyComplex_FromCComplex(v
->cval
);
687 complex_abs(PyComplexObject
*v
)
691 PyFPE_START_PROTECT("complex_abs", return 0)
692 result
= c_abs(v
->cval
);
693 PyFPE_END_PROTECT(result
)
695 if (errno
== ERANGE
) {
696 PyErr_SetString(PyExc_OverflowError
,
697 "absolute value too large");
700 return PyFloat_FromDouble(result
);
704 complex_nonzero(PyComplexObject
*v
)
706 return v
->cval
.real
!= 0.0 || v
->cval
.imag
!= 0.0;
710 complex_coerce(PyObject
**pv
, PyObject
**pw
)
714 if (PyInt_Check(*pw
)) {
715 cval
.real
= (double)PyInt_AsLong(*pw
);
716 *pw
= PyComplex_FromCComplex(cval
);
720 else if (PyLong_Check(*pw
)) {
721 cval
.real
= PyLong_AsDouble(*pw
);
722 if (cval
.real
== -1.0 && PyErr_Occurred())
724 *pw
= PyComplex_FromCComplex(cval
);
728 else if (PyFloat_Check(*pw
)) {
729 cval
.real
= PyFloat_AsDouble(*pw
);
730 *pw
= PyComplex_FromCComplex(cval
);
734 else if (PyComplex_Check(*pw
)) {
739 return 1; /* Can't do it */
743 complex_richcompare(PyObject
*v
, PyObject
*w
, int op
)
749 c
= PyNumber_CoerceEx(&v
, &w
);
753 Py_INCREF(Py_NotImplemented
);
754 return Py_NotImplemented
;
756 /* Make sure both arguments are complex. */
757 if (!(PyComplex_Check(v
) && PyComplex_Check(w
))) {
760 Py_INCREF(Py_NotImplemented
);
761 return Py_NotImplemented
;
764 i
= ((PyComplexObject
*)v
)->cval
;
765 j
= ((PyComplexObject
*)w
)->cval
;
769 if (op
!= Py_EQ
&& op
!= Py_NE
) {
770 PyErr_SetString(PyExc_TypeError
,
771 "no ordering relation is defined for complex numbers");
775 if ((i
.real
== j
.real
&& i
.imag
== j
.imag
) == (op
== Py_EQ
))
785 complex_int(PyObject
*v
)
787 PyErr_SetString(PyExc_TypeError
,
788 "can't convert complex to int; use int(abs(z))");
793 complex_long(PyObject
*v
)
795 PyErr_SetString(PyExc_TypeError
,
796 "can't convert complex to long; use long(abs(z))");
801 complex_float(PyObject
*v
)
803 PyErr_SetString(PyExc_TypeError
,
804 "can't convert complex to float; use abs(z)");
809 complex_conjugate(PyObject
*self
)
812 c
= ((PyComplexObject
*)self
)->cval
;
814 return PyComplex_FromCComplex(c
);
817 PyDoc_STRVAR(complex_conjugate_doc
,
818 "complex.conjugate() -> complex\n"
820 "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
823 complex_getnewargs(PyComplexObject
*v
)
825 Py_complex c
= v
->cval
;
826 return Py_BuildValue("(dd)", c
.real
, c
.imag
);
831 complex_is_finite(PyObject
*self
)
834 c
= ((PyComplexObject
*)self
)->cval
;
835 return PyBool_FromLong((long)(Py_IS_FINITE(c
.real
) &&
836 Py_IS_FINITE(c
.imag
)));
839 PyDoc_STRVAR(complex_is_finite_doc
,
840 "complex.is_finite() -> bool\n"
842 "Returns True if the real and the imaginary part is finite.");
845 static PyMethodDef complex_methods
[] = {
846 {"conjugate", (PyCFunction
)complex_conjugate
, METH_NOARGS
,
847 complex_conjugate_doc
},
849 {"is_finite", (PyCFunction
)complex_is_finite
, METH_NOARGS
,
850 complex_is_finite_doc
},
852 {"__getnewargs__", (PyCFunction
)complex_getnewargs
, METH_NOARGS
},
853 {NULL
, NULL
} /* sentinel */
856 static PyMemberDef complex_members
[] = {
857 {"real", T_DOUBLE
, offsetof(PyComplexObject
, cval
.real
), READONLY
,
858 "the real part of a complex number"},
859 {"imag", T_DOUBLE
, offsetof(PyComplexObject
, cval
.imag
), READONLY
,
860 "the imaginary part of a complex number"},
865 complex_subtype_from_string(PyTypeObject
*type
, PyObject
*v
)
867 const char *s
, *start
;
869 double x
=0.0, y
=0.0, z
;
870 int got_re
=0, got_im
=0, got_bracket
=0, done
=0;
874 char buffer
[256]; /* For errors */
875 #ifdef Py_USING_UNICODE
880 if (PyString_Check(v
)) {
881 s
= PyString_AS_STRING(v
);
882 len
= PyString_GET_SIZE(v
);
884 #ifdef Py_USING_UNICODE
885 else if (PyUnicode_Check(v
)) {
886 if (PyUnicode_GET_SIZE(v
) >= (Py_ssize_t
)sizeof(s_buffer
)) {
887 PyErr_SetString(PyExc_ValueError
,
888 "complex() literal too large to convert");
891 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v
),
892 PyUnicode_GET_SIZE(v
),
900 else if (PyObject_AsCharBuffer(v
, &s
, &len
)) {
901 PyErr_SetString(PyExc_TypeError
,
902 "complex() arg is not a string");
906 /* position on first nonblank */
908 while (*s
&& isspace(Py_CHARMASK(*s
)))
911 PyErr_SetString(PyExc_ValueError
,
912 "complex() arg is an empty string");
916 /* Skip over possible bracket from repr(). */
919 while (*s
&& isspace(Py_CHARMASK(*s
)))
930 if (s
-start
!= len
) {
933 "complex() arg contains a null byte");
936 if(!done
) sw_error
=1;
940 if (!got_bracket
|| !(got_re
|| got_im
)) {
947 while (*s
&& isspace(Py_CHARMASK(*s
)))
956 if (done
) sw_error
=1;
958 if ( *s
=='\0'||*s
=='+'||*s
=='-'||*s
==')'||
959 isspace(Py_CHARMASK(*s
)) ) sw_error
=1;
964 if (got_im
|| done
) {
976 if (*s
!='+' && *s
!='-' )
981 if (isspace(Py_CHARMASK(*s
))) {
982 while (*s
&& isspace(Py_CHARMASK(*s
)))
991 (*s
=='.' || isdigit(Py_CHARMASK(*s
)));
992 if (done
||!digit_or_dot
) {
997 PyFPE_START_PROTECT("strtod", return 0)
998 z
= PyOS_ascii_strtod(s
, &end
) ;
1001 PyOS_snprintf(buffer
, sizeof(buffer
),
1002 "float() out of range: %.150s", s
);
1009 if (*s
=='J' || *s
=='j') {
1018 /* accept a real part */
1026 } /* end of switch */
1028 } while (s
- start
< len
&& !sw_error
);
1030 if (sw_error
|| got_bracket
) {
1031 PyErr_SetString(PyExc_ValueError
,
1032 "complex() arg is a malformed string");
1036 return complex_subtype_from_doubles(type
, x
, y
);
1040 complex_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
)
1042 PyObject
*r
, *i
, *tmp
, *f
;
1043 PyNumberMethods
*nbr
, *nbi
= NULL
;
1046 int cr_is_complex
= 0;
1047 int ci_is_complex
= 0;
1048 static PyObject
*complexstr
;
1049 static char *kwlist
[] = {"real", "imag", 0};
1053 if (!PyArg_ParseTupleAndKeywords(args
, kwds
, "|OO:complex", kwlist
,
1057 /* Special-case for a single argument when type(arg) is complex. */
1058 if (PyComplex_CheckExact(r
) && i
== NULL
&&
1059 type
== &PyComplex_Type
) {
1060 /* Note that we can't know whether it's safe to return
1061 a complex *subclass* instance as-is, hence the restriction
1062 to exact complexes here. If either the input or the
1063 output is a complex subclass, it will be handled below
1064 as a non-orthogonal vector. */
1068 if (PyString_Check(r
) || PyUnicode_Check(r
)) {
1070 PyErr_SetString(PyExc_TypeError
,
1071 "complex() can't take second arg"
1072 " if first is a string");
1075 return complex_subtype_from_string(type
, r
);
1077 if (i
!= NULL
&& (PyString_Check(i
) || PyUnicode_Check(i
))) {
1078 PyErr_SetString(PyExc_TypeError
,
1079 "complex() second arg can't be a string");
1083 /* XXX Hack to support classes with __complex__ method */
1084 if (complexstr
== NULL
) {
1085 complexstr
= PyString_InternFromString("__complex__");
1086 if (complexstr
== NULL
)
1089 f
= PyObject_GetAttr(r
, complexstr
);
1093 PyObject
*args
= PyTuple_New(0);
1096 r
= PyEval_CallObject(f
, args
);
1103 nbr
= r
->ob_type
->tp_as_number
;
1105 nbi
= i
->ob_type
->tp_as_number
;
1106 if (nbr
== NULL
|| nbr
->nb_float
== NULL
||
1107 ((i
!= NULL
) && (nbi
== NULL
|| nbi
->nb_float
== NULL
))) {
1108 PyErr_SetString(PyExc_TypeError
,
1109 "complex() argument must be a string or a number");
1116 /* If we get this far, then the "real" and "imag" parts should
1117 both be treated as numbers, and the constructor should return a
1118 complex number equal to (real + imag*1j).
1120 Note that we do NOT assume the input to already be in canonical
1121 form; the "real" and "imag" parts might themselves be complex
1122 numbers, which slightly complicates the code below. */
1123 if (PyComplex_Check(r
)) {
1124 /* Note that if r is of a complex subtype, we're only
1125 retaining its real & imag parts here, and the return
1126 value is (properly) of the builtin complex type. */
1127 cr
= ((PyComplexObject
*)r
)->cval
;
1134 /* The "real" part really is entirely real, and contributes
1135 nothing in the imaginary direction.
1136 Just treat it as a double. */
1137 tmp
= PyNumber_Float(r
);
1139 /* r was a newly created complex number, rather
1140 than the original "real" argument. */
1145 if (!PyFloat_Check(tmp
)) {
1146 PyErr_SetString(PyExc_TypeError
,
1147 "float(r) didn't return a float");
1151 cr
.real
= PyFloat_AsDouble(tmp
);
1152 cr
.imag
= 0.0; /* Shut up compiler warning */
1158 else if (PyComplex_Check(i
)) {
1159 ci
= ((PyComplexObject
*)i
)->cval
;
1162 /* The "imag" part really is entirely imaginary, and
1163 contributes nothing in the real direction.
1164 Just treat it as a double. */
1165 tmp
= (*nbi
->nb_float
)(i
);
1168 ci
.real
= PyFloat_AsDouble(tmp
);
1171 /* If the input was in canonical form, then the "real" and "imag"
1172 parts are real numbers, so that ci.imag and cr.imag are zero.
1173 We need this correction in case they were not real numbers. */
1175 if (ci_is_complex
) {
1178 if (cr_is_complex
) {
1181 return complex_subtype_from_doubles(type
, cr
.real
, ci
.real
);
1184 PyDoc_STRVAR(complex_doc
,
1185 "complex(real[, imag]) -> complex number\n"
1187 "Create a complex number from a real part and an optional imaginary part.\n"
1188 "This is equivalent to (real + imag*1j) where imag defaults to 0.");
1190 static PyNumberMethods complex_as_number
= {
1191 (binaryfunc
)complex_add
, /* nb_add */
1192 (binaryfunc
)complex_sub
, /* nb_subtract */
1193 (binaryfunc
)complex_mul
, /* nb_multiply */
1194 (binaryfunc
)complex_classic_div
, /* nb_divide */
1195 (binaryfunc
)complex_remainder
, /* nb_remainder */
1196 (binaryfunc
)complex_divmod
, /* nb_divmod */
1197 (ternaryfunc
)complex_pow
, /* nb_power */
1198 (unaryfunc
)complex_neg
, /* nb_negative */
1199 (unaryfunc
)complex_pos
, /* nb_positive */
1200 (unaryfunc
)complex_abs
, /* nb_absolute */
1201 (inquiry
)complex_nonzero
, /* nb_nonzero */
1208 complex_coerce
, /* nb_coerce */
1209 complex_int
, /* nb_int */
1210 complex_long
, /* nb_long */
1211 complex_float
, /* nb_float */
1214 0, /* nb_inplace_add */
1215 0, /* nb_inplace_subtract */
1216 0, /* nb_inplace_multiply*/
1217 0, /* nb_inplace_divide */
1218 0, /* nb_inplace_remainder */
1219 0, /* nb_inplace_power */
1220 0, /* nb_inplace_lshift */
1221 0, /* nb_inplace_rshift */
1222 0, /* nb_inplace_and */
1223 0, /* nb_inplace_xor */
1224 0, /* nb_inplace_or */
1225 (binaryfunc
)complex_int_div
, /* nb_floor_divide */
1226 (binaryfunc
)complex_div
, /* nb_true_divide */
1227 0, /* nb_inplace_floor_divide */
1228 0, /* nb_inplace_true_divide */
1231 PyTypeObject PyComplex_Type
= {
1232 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
1234 sizeof(PyComplexObject
),
1236 complex_dealloc
, /* tp_dealloc */
1237 (printfunc
)complex_print
, /* tp_print */
1241 (reprfunc
)complex_repr
, /* tp_repr */
1242 &complex_as_number
, /* tp_as_number */
1243 0, /* tp_as_sequence */
1244 0, /* tp_as_mapping */
1245 (hashfunc
)complex_hash
, /* tp_hash */
1247 (reprfunc
)complex_str
, /* tp_str */
1248 PyObject_GenericGetAttr
, /* tp_getattro */
1249 0, /* tp_setattro */
1250 0, /* tp_as_buffer */
1251 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_BASETYPE
, /* tp_flags */
1252 complex_doc
, /* tp_doc */
1253 0, /* tp_traverse */
1255 complex_richcompare
, /* tp_richcompare */
1256 0, /* tp_weaklistoffset */
1258 0, /* tp_iternext */
1259 complex_methods
, /* tp_methods */
1260 complex_members
, /* tp_members */
1264 0, /* tp_descr_get */
1265 0, /* tp_descr_set */
1266 0, /* tp_dictoffset */
1268 PyType_GenericAlloc
, /* tp_alloc */
1269 complex_new
, /* tp_new */
1270 PyObject_Del
, /* tp_free */