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_format(PyComplexObject
*v
, int precision
, char format_code
)
359 PyObject
*result
= NULL
;
362 /* If these are non-NULL, they'll need to be freed. */
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. */
374 if (v
->cval
.real
== 0. && copysign(1.0, v
->cval
.real
)==1.0) {
376 im
= PyOS_double_to_string(v
->cval
.imag
, format_code
,
383 /* Format imaginary part with sign, real part without */
384 pre
= PyOS_double_to_string(v
->cval
.real
, format_code
,
392 im
= PyOS_double_to_string(v
->cval
.imag
, format_code
,
393 precision
, Py_DTSF_SIGN
, NULL
);
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
);
409 PyOS_snprintf(buf
, len
, "%s%s%sj%s", lead
, re
, im
, tail
);
410 result
= PyString_FromString(buf
);
420 complex_print(PyComplexObject
*v
, FILE *fp
, int flags
)
424 if (flags
& Py_PRINT_RAW
)
425 formatv
= complex_format(v
, PyFloat_STR_PRECISION
, 'g');
427 formatv
= complex_format(v
, 0, 'r');
430 buf
= PyString_AS_STRING(formatv
);
431 Py_BEGIN_ALLOW_THREADS
439 complex_repr(PyComplexObject
*v
)
441 return complex_format(v
, 0, 'r');
445 complex_str(PyComplexObject
*v
)
447 return complex_format(v
, PyFloat_STR_PRECISION
, 'g');
451 complex_hash(PyComplexObject
*v
)
453 long hashreal
, hashimag
, combined
;
454 hashreal
= _Py_HashDouble(v
->cval
.real
);
457 hashimag
= _Py_HashDouble(v
->cval
.imag
);
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
;
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) \
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
);
489 if (PyLong_Check(obj
)) {
490 pc
->real
= PyLong_AsDouble(obj
);
491 if (pc
->real
== -1.0 && PyErr_Occurred()) {
497 if (PyFloat_Check(obj
)) {
498 pc
->real
= PyFloat_AsDouble(obj
);
501 Py_INCREF(Py_NotImplemented
);
502 *pobj
= Py_NotImplemented
;
508 complex_add(PyComplexObject
*v
, PyComplexObject
*w
)
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
);
518 complex_sub(PyComplexObject
*v
, PyComplexObject
*w
)
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
);
528 complex_mul(PyComplexObject
*v
, PyComplexObject
*w
)
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
);
538 complex_div(PyComplexObject
*v
, PyComplexObject
*w
)
542 PyFPE_START_PROTECT("complex_div", return 0)
544 quot
= c_quot(v
->cval
,w
->cval
);
545 PyFPE_END_PROTECT(quot
)
547 PyErr_SetString(PyExc_ZeroDivisionError
, "complex division");
550 return PyComplex_FromCComplex(quot
);
554 complex_classic_div(PyComplexObject
*v
, PyComplexObject
*w
)
558 if (Py_DivisionWarningFlag
>= 2 &&
559 PyErr_Warn(PyExc_DeprecationWarning
,
560 "classic complex division") < 0)
563 PyFPE_START_PROTECT("complex_classic_div", return 0)
565 quot
= c_quot(v
->cval
,w
->cval
);
566 PyFPE_END_PROTECT(quot
)
568 PyErr_SetString(PyExc_ZeroDivisionError
, "complex division");
571 return PyComplex_FromCComplex(quot
);
575 complex_remainder(PyComplexObject
*v
, PyComplexObject
*w
)
579 if (PyErr_Warn(PyExc_DeprecationWarning
,
580 "complex divmod(), // and % are deprecated") < 0)
584 div
= c_quot(v
->cval
,w
->cval
); /* The raw divisor value. */
586 PyErr_SetString(PyExc_ZeroDivisionError
, "complex remainder");
589 div
.real
= floor(div
.real
); /* Use the floor of the real part. */
591 mod
= c_diff(v
->cval
, c_prod(w
->cval
, div
));
593 return PyComplex_FromCComplex(mod
);
598 complex_divmod(PyComplexObject
*v
, PyComplexObject
*w
)
603 if (PyErr_Warn(PyExc_DeprecationWarning
,
604 "complex divmod(), // and % are deprecated") < 0)
608 div
= c_quot(v
->cval
,w
->cval
); /* The raw divisor value. */
610 PyErr_SetString(PyExc_ZeroDivisionError
, "complex divmod()");
613 div
.real
= floor(div
.real
); /* Use the floor of the real part. */
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
);
625 complex_pow(PyObject
*v
, PyObject
*w
, PyObject
*z
)
635 PyErr_SetString(PyExc_ValueError
, "complex modulo");
638 PyFPE_START_PROTECT("complex_pow", return 0)
641 int_exponent
= (long)exponent
.real
;
642 if (exponent
.imag
== 0. && exponent
.real
== int_exponent
)
643 p
= c_powi(a
,int_exponent
);
645 p
= c_pow(a
,exponent
);
648 Py_ADJUST_ERANGE2(p
.real
, p
.imag
);
650 PyErr_SetString(PyExc_ZeroDivisionError
,
651 "0.0 to a negative or complex power");
654 else if (errno
== ERANGE
) {
655 PyErr_SetString(PyExc_OverflowError
,
656 "complex exponentiation");
659 return PyComplex_FromCComplex(p
);
663 complex_int_div(PyComplexObject
*v
, PyComplexObject
*w
)
667 if (PyErr_Warn(PyExc_DeprecationWarning
,
668 "complex divmod(), // and % are deprecated") < 0)
671 t
= complex_divmod(v
, w
);
673 r
= PyTuple_GET_ITEM(t
, 0);
682 complex_neg(PyComplexObject
*v
)
685 neg
.real
= -v
->cval
.real
;
686 neg
.imag
= -v
->cval
.imag
;
687 return PyComplex_FromCComplex(neg
);
691 complex_pos(PyComplexObject
*v
)
693 if (PyComplex_CheckExact(v
)) {
695 return (PyObject
*)v
;
698 return PyComplex_FromCComplex(v
->cval
);
702 complex_abs(PyComplexObject
*v
)
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");
715 return PyFloat_FromDouble(result
);
719 complex_nonzero(PyComplexObject
*v
)
721 return v
->cval
.real
!= 0.0 || v
->cval
.imag
!= 0.0;
725 complex_coerce(PyObject
**pv
, PyObject
**pw
)
729 if (PyInt_Check(*pw
)) {
730 cval
.real
= (double)PyInt_AsLong(*pw
);
731 *pw
= PyComplex_FromCComplex(cval
);
735 else if (PyLong_Check(*pw
)) {
736 cval
.real
= PyLong_AsDouble(*pw
);
737 if (cval
.real
== -1.0 && PyErr_Occurred())
739 *pw
= PyComplex_FromCComplex(cval
);
743 else if (PyFloat_Check(*pw
)) {
744 cval
.real
= PyFloat_AsDouble(*pw
);
745 *pw
= PyComplex_FromCComplex(cval
);
749 else if (PyComplex_Check(*pw
)) {
754 return 1; /* Can't do it */
758 complex_richcompare(PyObject
*v
, PyObject
*w
, int op
)
764 c
= PyNumber_CoerceEx(&v
, &w
);
768 Py_INCREF(Py_NotImplemented
);
769 return Py_NotImplemented
;
771 /* Make sure both arguments are complex. */
772 if (!(PyComplex_Check(v
) && PyComplex_Check(w
))) {
775 Py_INCREF(Py_NotImplemented
);
776 return Py_NotImplemented
;
779 i
= ((PyComplexObject
*)v
)->cval
;
780 j
= ((PyComplexObject
*)w
)->cval
;
784 if (op
!= Py_EQ
&& op
!= Py_NE
) {
785 PyErr_SetString(PyExc_TypeError
,
786 "no ordering relation is defined for complex numbers");
790 if ((i
.real
== j
.real
&& i
.imag
== j
.imag
) == (op
== Py_EQ
))
800 complex_int(PyObject
*v
)
802 PyErr_SetString(PyExc_TypeError
,
803 "can't convert complex to int");
808 complex_long(PyObject
*v
)
810 PyErr_SetString(PyExc_TypeError
,
811 "can't convert complex to long");
816 complex_float(PyObject
*v
)
818 PyErr_SetString(PyExc_TypeError
,
819 "can't convert complex to float");
824 complex_conjugate(PyObject
*self
)
827 c
= ((PyComplexObject
*)self
)->cval
;
829 return PyComplex_FromCComplex(c
);
832 PyDoc_STRVAR(complex_conjugate_doc
,
833 "complex.conjugate() -> complex\n"
835 "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
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"
847 "Converts to a string according to format_spec.");
850 complex__format__(PyObject
* self
, PyObject
* args
)
852 PyObject
*format_spec
;
854 if (!PyArg_ParseTuple(args
, "O:__format__", &format_spec
))
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 */
863 PyObject
*str_spec
= PyObject_Str(format_spec
);
865 if (str_spec
== NULL
)
868 result
= _PyComplex_FormatAdvanced(self
,
869 PyBytes_AS_STRING(str_spec
),
870 PyBytes_GET_SIZE(str_spec
));
875 PyErr_SetString(PyExc_TypeError
, "__format__ requires str or unicode");
881 complex_is_finite(PyObject
*self
)
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"
892 "Returns True if the real and the imaginary part is finite.");
895 static PyMethodDef complex_methods
[] = {
896 {"conjugate", (PyCFunction
)complex_conjugate
, METH_NOARGS
,
897 complex_conjugate_doc
},
899 {"is_finite", (PyCFunction
)complex_is_finite
, METH_NOARGS
,
900 complex_is_finite_doc
},
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"},
917 complex_subtype_from_string(PyTypeObject
*type
, PyObject
*v
)
919 const char *s
, *start
;
921 double x
=0.0, y
=0.0, z
;
923 #ifdef Py_USING_UNICODE
924 char *s_buffer
= NULL
;
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 s_buffer
= (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v
)+1);
935 if (s_buffer
== NULL
)
936 return PyErr_NoMemory();
937 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v
),
938 PyUnicode_GET_SIZE(v
),
946 else if (PyObject_AsCharBuffer(v
, &s
, &len
)) {
947 PyErr_SetString(PyExc_TypeError
,
948 "complex() arg is not a string");
952 /* position on first nonblank */
954 while (Py_ISSPACE(*s
))
957 /* Skip over possible bracket from repr(). */
960 while (Py_ISSPACE(*s
))
964 /* a valid complex string usually takes one of the three forms:
966 <float> - real part only
967 <float>j - imaginary part only
968 <float><signed-float>j - real and imaginary parts
970 where <float> represents any numeric string that's accepted by the
971 float constructor (including 'nan', 'inf', 'infinity', etc.), and
972 <signed-float> is any string of the form <float> whose first
973 character is '+' or '-'.
975 For backwards compatibility, the extra forms
981 are also accepted, though support for these forms may be removed from
982 a future version of Python.
985 /* first look for forms starting with <float> */
986 z
= PyOS_string_to_double(s
, &end
, NULL
);
987 if (z
== -1.0 && PyErr_Occurred()) {
988 if (PyErr_ExceptionMatches(PyExc_ValueError
))
994 /* all 4 forms starting with <float> land here */
996 if (*s
== '+' || *s
== '-') {
997 /* <float><signed-float>j | <float><sign>j */
999 y
= PyOS_string_to_double(s
, &end
, NULL
);
1000 if (y
== -1.0 && PyErr_Occurred()) {
1001 if (PyErr_ExceptionMatches(PyExc_ValueError
))
1007 /* <float><signed-float>j */
1010 /* <float><sign>j */
1011 y
= *s
== '+' ? 1.0 : -1.0;
1014 if (!(*s
== 'j' || *s
== 'J'))
1018 else if (*s
== 'j' || *s
== 'J') {
1028 /* not starting with <float>; must be <sign>j or j */
1029 if (*s
== '+' || *s
== '-') {
1031 y
= *s
== '+' ? 1.0 : -1.0;
1037 if (!(*s
== 'j' || *s
== 'J'))
1042 /* trailing whitespace and closing bracket */
1043 while (Py_ISSPACE(*s
))
1046 /* if there was an opening parenthesis, then the corresponding
1047 closing parenthesis should be right here */
1051 while (Py_ISSPACE(*s
))
1055 /* we should now be at the end of the string */
1060 #ifdef Py_USING_UNICODE
1062 PyMem_FREE(s_buffer
);
1064 return complex_subtype_from_doubles(type
, x
, y
);
1067 PyErr_SetString(PyExc_ValueError
,
1068 "complex() arg is a malformed string");
1070 #ifdef Py_USING_UNICODE
1072 PyMem_FREE(s_buffer
);
1078 complex_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
)
1080 PyObject
*r
, *i
, *tmp
, *f
;
1081 PyNumberMethods
*nbr
, *nbi
= NULL
;
1084 int cr_is_complex
= 0;
1085 int ci_is_complex
= 0;
1086 static PyObject
*complexstr
;
1087 static char *kwlist
[] = {"real", "imag", 0};
1091 if (!PyArg_ParseTupleAndKeywords(args
, kwds
, "|OO:complex", kwlist
,
1095 /* Special-case for a single argument when type(arg) is complex. */
1096 if (PyComplex_CheckExact(r
) && i
== NULL
&&
1097 type
== &PyComplex_Type
) {
1098 /* Note that we can't know whether it's safe to return
1099 a complex *subclass* instance as-is, hence the restriction
1100 to exact complexes here. If either the input or the
1101 output is a complex subclass, it will be handled below
1102 as a non-orthogonal vector. */
1106 if (PyString_Check(r
) || PyUnicode_Check(r
)) {
1108 PyErr_SetString(PyExc_TypeError
,
1109 "complex() can't take second arg"
1110 " if first is a string");
1113 return complex_subtype_from_string(type
, r
);
1115 if (i
!= NULL
&& (PyString_Check(i
) || PyUnicode_Check(i
))) {
1116 PyErr_SetString(PyExc_TypeError
,
1117 "complex() second arg can't be a string");
1121 /* XXX Hack to support classes with __complex__ method */
1122 if (complexstr
== NULL
) {
1123 complexstr
= PyString_InternFromString("__complex__");
1124 if (complexstr
== NULL
)
1127 f
= PyObject_GetAttr(r
, complexstr
);
1131 PyObject
*args
= PyTuple_New(0);
1134 r
= PyEval_CallObject(f
, args
);
1141 nbr
= r
->ob_type
->tp_as_number
;
1143 nbi
= i
->ob_type
->tp_as_number
;
1144 if (nbr
== NULL
|| nbr
->nb_float
== NULL
||
1145 ((i
!= NULL
) && (nbi
== NULL
|| nbi
->nb_float
== NULL
))) {
1146 PyErr_SetString(PyExc_TypeError
,
1147 "complex() argument must be a string or a number");
1154 /* If we get this far, then the "real" and "imag" parts should
1155 both be treated as numbers, and the constructor should return a
1156 complex number equal to (real + imag*1j).
1158 Note that we do NOT assume the input to already be in canonical
1159 form; the "real" and "imag" parts might themselves be complex
1160 numbers, which slightly complicates the code below. */
1161 if (PyComplex_Check(r
)) {
1162 /* Note that if r is of a complex subtype, we're only
1163 retaining its real & imag parts here, and the return
1164 value is (properly) of the builtin complex type. */
1165 cr
= ((PyComplexObject
*)r
)->cval
;
1172 /* The "real" part really is entirely real, and contributes
1173 nothing in the imaginary direction.
1174 Just treat it as a double. */
1175 tmp
= PyNumber_Float(r
);
1177 /* r was a newly created complex number, rather
1178 than the original "real" argument. */
1183 if (!PyFloat_Check(tmp
)) {
1184 PyErr_SetString(PyExc_TypeError
,
1185 "float(r) didn't return a float");
1189 cr
.real
= PyFloat_AsDouble(tmp
);
1190 cr
.imag
= 0.0; /* Shut up compiler warning */
1196 else if (PyComplex_Check(i
)) {
1197 ci
= ((PyComplexObject
*)i
)->cval
;
1200 /* The "imag" part really is entirely imaginary, and
1201 contributes nothing in the real direction.
1202 Just treat it as a double. */
1203 tmp
= (*nbi
->nb_float
)(i
);
1206 ci
.real
= PyFloat_AsDouble(tmp
);
1209 /* If the input was in canonical form, then the "real" and "imag"
1210 parts are real numbers, so that ci.imag and cr.imag are zero.
1211 We need this correction in case they were not real numbers. */
1213 if (ci_is_complex
) {
1216 if (cr_is_complex
) {
1219 return complex_subtype_from_doubles(type
, cr
.real
, ci
.real
);
1222 PyDoc_STRVAR(complex_doc
,
1223 "complex(real[, imag]) -> complex number\n"
1225 "Create a complex number from a real part and an optional imaginary part.\n"
1226 "This is equivalent to (real + imag*1j) where imag defaults to 0.");
1228 static PyNumberMethods complex_as_number
= {
1229 (binaryfunc
)complex_add
, /* nb_add */
1230 (binaryfunc
)complex_sub
, /* nb_subtract */
1231 (binaryfunc
)complex_mul
, /* nb_multiply */
1232 (binaryfunc
)complex_classic_div
, /* nb_divide */
1233 (binaryfunc
)complex_remainder
, /* nb_remainder */
1234 (binaryfunc
)complex_divmod
, /* nb_divmod */
1235 (ternaryfunc
)complex_pow
, /* nb_power */
1236 (unaryfunc
)complex_neg
, /* nb_negative */
1237 (unaryfunc
)complex_pos
, /* nb_positive */
1238 (unaryfunc
)complex_abs
, /* nb_absolute */
1239 (inquiry
)complex_nonzero
, /* nb_nonzero */
1246 complex_coerce
, /* nb_coerce */
1247 complex_int
, /* nb_int */
1248 complex_long
, /* nb_long */
1249 complex_float
, /* nb_float */
1252 0, /* nb_inplace_add */
1253 0, /* nb_inplace_subtract */
1254 0, /* nb_inplace_multiply*/
1255 0, /* nb_inplace_divide */
1256 0, /* nb_inplace_remainder */
1257 0, /* nb_inplace_power */
1258 0, /* nb_inplace_lshift */
1259 0, /* nb_inplace_rshift */
1260 0, /* nb_inplace_and */
1261 0, /* nb_inplace_xor */
1262 0, /* nb_inplace_or */
1263 (binaryfunc
)complex_int_div
, /* nb_floor_divide */
1264 (binaryfunc
)complex_div
, /* nb_true_divide */
1265 0, /* nb_inplace_floor_divide */
1266 0, /* nb_inplace_true_divide */
1269 PyTypeObject PyComplex_Type
= {
1270 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
1272 sizeof(PyComplexObject
),
1274 complex_dealloc
, /* tp_dealloc */
1275 (printfunc
)complex_print
, /* tp_print */
1279 (reprfunc
)complex_repr
, /* tp_repr */
1280 &complex_as_number
, /* tp_as_number */
1281 0, /* tp_as_sequence */
1282 0, /* tp_as_mapping */
1283 (hashfunc
)complex_hash
, /* tp_hash */
1285 (reprfunc
)complex_str
, /* tp_str */
1286 PyObject_GenericGetAttr
, /* tp_getattro */
1287 0, /* tp_setattro */
1288 0, /* tp_as_buffer */
1289 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_BASETYPE
, /* tp_flags */
1290 complex_doc
, /* tp_doc */
1291 0, /* tp_traverse */
1293 complex_richcompare
, /* tp_richcompare */
1294 0, /* tp_weaklistoffset */
1296 0, /* tp_iternext */
1297 complex_methods
, /* tp_methods */
1298 complex_members
, /* tp_members */
1302 0, /* tp_descr_get */
1303 0, /* tp_descr_set */
1304 0, /* tp_dictoffset */
1306 PyType_GenericAlloc
, /* tp_alloc */
1307 complex_new
, /* tp_new */
1308 PyObject_Del
, /* tp_free */