2 /* Complex object implementation */
4 /* Borrows heavily from floatobject.c */
6 /* Submitted by Jim Hugunin */
9 #include "structmember.h"
11 #ifndef WITHOUT_COMPLEX
13 /* Precisions used by repr() and str(), respectively.
15 The repr() precision (17 significant decimal digits) is the minimal number
16 that is guaranteed to have enough precision so that if the number is read
17 back in the exact same binary value is recreated. This is true for IEEE
18 floating point by design, and also happens to work for all other modern
21 The str() precision is chosen so that in most cases, the rounding noise
22 created by various operations is suppressed, while giving plenty of
23 precision for practical use.
29 /* elementary operations on complex numbers */
31 static Py_complex c_1 = {1., 0.};
34 c_sum(Py_complex a, Py_complex b)
37 r.real = a.real + b.real;
38 r.imag = a.imag + b.imag;
43 c_diff(Py_complex a, Py_complex b)
46 r.real = a.real - b.real;
47 r.imag = a.imag - b.imag;
61 c_prod(Py_complex a, Py_complex b)
64 r.real = a.real*b.real - a.imag*b.imag;
65 r.imag = a.real*b.imag + a.imag*b.real;
70 c_quot(Py_complex a, Py_complex b)
72 /******************************************************************
73 This was the original algorithm. It's grossly prone to spurious
74 overflow and underflow errors. It also merrily divides by 0 despite
75 checking for that(!). The code still serves a doc purpose here, as
76 the algorithm following is a simple by-cases transformation of this
80 double d = b.real*b.real + b.imag*b.imag;
83 r.real = (a.real*b.real + a.imag*b.imag)/d;
84 r.imag = (a.imag*b.real - a.real*b.imag)/d;
86 ******************************************************************/
88 /* This algorithm is better, and is pretty obvious: first divide the
89 * numerators and denominator by whichever of {b.real, b.imag} has
90 * larger magnitude. The earliest reference I found was to CACM
91 * Algorithm 116 (Complex Division, Robert L. Smith, Stanford
92 * University). As usual, though, we're still ignoring all IEEE
95 Py_complex r; /* the result */
96 const double abs_breal = b.real < 0 ? -b.real : b.real;
97 const double abs_bimag = b.imag < 0 ? -b.imag : b.imag;
99 if (abs_breal >= abs_bimag) {
100 /* divide tops and bottom by b.real */
101 if (abs_breal == 0.0) {
103 r.real = r.imag = 0.0;
106 const double ratio = b.imag / b.real;
107 const double denom = b.real + b.imag * ratio;
108 r.real = (a.real + a.imag * ratio) / denom;
109 r.imag = (a.imag - a.real * ratio) / denom;
113 /* divide tops and bottom by b.imag */
114 const double ratio = b.real / b.imag;
115 const double denom = b.real * ratio + b.imag;
116 assert(b.imag != 0.0);
117 r.real = (a.real * ratio + a.imag) / denom;
118 r.imag = (a.imag * ratio - a.real) / denom;
124 c_pow(Py_complex a, Py_complex b)
127 double vabs,len,at,phase;
128 if (b.real == 0. && b.imag == 0.) {
132 else if (a.real == 0. && a.imag == 0.) {
133 if (b.imag != 0. || b.real < 0.)
139 vabs = hypot(a.real,a.imag);
140 len = pow(vabs,b.real);
141 at = atan2(a.imag, a.real);
144 len /= exp(at*b.imag);
145 phase += b.imag*log(vabs);
147 r.real = len*cos(phase);
148 r.imag = len*sin(phase);
154 c_powu(Py_complex x, long n)
160 while (mask > 0 && n >= mask) {
170 c_powi(Py_complex x, long n)
174 if (n > 100 || n < -100) {
175 cn.real = (double) n;
182 return c_quot(c_1,c_powu(x,-n));
189 /* sets errno = ERANGE on overflow; otherwise errno = 0 */
192 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) {
193 /* C99 rules: if either the real or the imaginary part is an
194 infinity, return infinity, even if the other part is a
196 if (Py_IS_INFINITY(z.real)) {
197 result = fabs(z.real);
201 if (Py_IS_INFINITY(z.imag)) {
202 result = fabs(z.imag);
206 /* either the real or imaginary part is a NaN,
207 and neither is infinite. Result should be NaN. */
210 result = hypot(z.real, z.imag);
211 if (!Py_IS_FINITE(result))
219 complex_subtype_from_c_complex(PyTypeObject *type, Py_complex cval)
223 op = type->tp_alloc(type, 0);
225 ((PyComplexObject *)op)->cval = cval;
230 PyComplex_FromCComplex(Py_complex cval)
232 register PyComplexObject *op;
234 /* Inline PyObject_New */
235 op = (PyComplexObject *) PyObject_MALLOC(sizeof(PyComplexObject));
237 return PyErr_NoMemory();
238 PyObject_INIT(op, &PyComplex_Type);
240 return (PyObject *) op;
244 complex_subtype_from_doubles(PyTypeObject *type, double real, double imag)
249 return complex_subtype_from_c_complex(type, c);
253 PyComplex_FromDoubles(double real, double imag)
258 return PyComplex_FromCComplex(c);
262 PyComplex_RealAsDouble(PyObject *op)
264 if (PyComplex_Check(op)) {
265 return ((PyComplexObject *)op)->cval.real;
268 return PyFloat_AsDouble(op);
273 PyComplex_ImagAsDouble(PyObject *op)
275 if (PyComplex_Check(op)) {
276 return ((PyComplexObject *)op)->cval.imag;
284 try_complex_special_method(PyObject *op) {
286 static PyObject *complexstr;
288 if (complexstr == NULL) {
289 complexstr = PyString_InternFromString("__complex__");
290 if (complexstr == NULL)
293 if (PyInstance_Check(op)) {
294 f = PyObject_GetAttr(op, complexstr);
296 if (PyErr_ExceptionMatches(PyExc_AttributeError))
303 f = _PyObject_LookupSpecial(op, "__complex__", &complexstr);
304 if (f == NULL && PyErr_Occurred())
308 PyObject *res = PyObject_CallFunctionObjArgs(f, NULL);
316 PyComplex_AsCComplex(PyObject *op)
319 PyObject *newop = NULL;
322 /* If op is already of type PyComplex_Type, return its value */
323 if (PyComplex_Check(op)) {
324 return ((PyComplexObject *)op)->cval;
326 /* If not, use op's __complex__ method, if it exists */
328 /* return -1 on failure */
332 newop = try_complex_special_method(op);
335 if (!PyComplex_Check(newop)) {
336 PyErr_SetString(PyExc_TypeError,
337 "__complex__ should return a complex object");
341 cv = ((PyComplexObject *)newop)->cval;
345 else if (PyErr_Occurred()) {
348 /* If neither of the above works, interpret op as a float giving the
349 real part of the result, and fill in the imaginary part as 0. */
351 /* PyFloat_AsDouble will return -1 on failure */
352 cv.real = PyFloat_AsDouble(op);
358 complex_dealloc(PyObject *op)
360 op->ob_type->tp_free(op);
365 complex_format(PyComplexObject *v, int precision, char format_code)
367 PyObject *result = NULL;
370 /* If these are non-NULL, they'll need to be freed. */
375 /* These do not need to be freed. re is either an alias
376 for pre or a pointer to a constant. lead and tail
377 are pointers to constants. */
382 if (v->cval.real == 0. && copysign(1.0, v->cval.real)==1.0) {
384 im = PyOS_double_to_string(v->cval.imag, format_code,
391 /* Format imaginary part with sign, real part without */
392 pre = PyOS_double_to_string(v->cval.real, format_code,
400 im = PyOS_double_to_string(v->cval.imag, format_code,
401 precision, Py_DTSF_SIGN, NULL);
409 /* Alloc the final buffer. Add one for the "j" in the format string,
410 and one for the trailing zero. */
411 len = strlen(lead) + strlen(re) + strlen(im) + strlen(tail) + 2;
412 buf = PyMem_Malloc(len);
417 PyOS_snprintf(buf, len, "%s%s%sj%s", lead, re, im, tail);
418 result = PyString_FromString(buf);
428 complex_print(PyComplexObject *v, FILE *fp, int flags)
432 if (flags & Py_PRINT_RAW)
433 formatv = complex_format(v, PyFloat_STR_PRECISION, 'g');
435 formatv = complex_format(v, 0, 'r');
438 buf = PyString_AS_STRING(formatv);
439 Py_BEGIN_ALLOW_THREADS
447 complex_repr(PyComplexObject *v)
449 return complex_format(v, 0, 'r');
453 complex_str(PyComplexObject *v)
455 return complex_format(v, PyFloat_STR_PRECISION, 'g');
459 complex_hash(PyComplexObject *v)
461 long hashreal, hashimag, combined;
462 hashreal = _Py_HashDouble(v->cval.real);
465 hashimag = _Py_HashDouble(v->cval.imag);
468 /* Note: if the imaginary part is 0, hashimag is 0 now,
469 * so the following returns hashreal unchanged. This is
470 * important because numbers of different types that
471 * compare equal must have the same hash value, so that
472 * hash(x + 0*j) must equal hash(x).
474 combined = hashreal + 1000003 * hashimag;
480 /* This macro may return! */
481 #define TO_COMPLEX(obj, c) \
482 if (PyComplex_Check(obj)) \
483 c = ((PyComplexObject *)(obj))->cval; \
484 else if (to_complex(&(obj), &(c)) < 0) \
488 to_complex(PyObject **pobj, Py_complex *pc)
490 PyObject *obj = *pobj;
492 pc->real = pc->imag = 0.0;
493 if (PyInt_Check(obj)) {
494 pc->real = PyInt_AS_LONG(obj);
497 if (PyLong_Check(obj)) {
498 pc->real = PyLong_AsDouble(obj);
499 if (pc->real == -1.0 && PyErr_Occurred()) {
505 if (PyFloat_Check(obj)) {
506 pc->real = PyFloat_AsDouble(obj);
509 Py_INCREF(Py_NotImplemented);
510 *pobj = Py_NotImplemented;
516 complex_add(PyObject *v, PyObject *w)
522 PyFPE_START_PROTECT("complex_add", return 0)
523 result = c_sum(a, b);
524 PyFPE_END_PROTECT(result)
525 return PyComplex_FromCComplex(result);
529 complex_sub(PyObject *v, PyObject *w)
535 PyFPE_START_PROTECT("complex_sub", return 0)
536 result = c_diff(a, b);
537 PyFPE_END_PROTECT(result)
538 return PyComplex_FromCComplex(result);
542 complex_mul(PyObject *v, PyObject *w)
548 PyFPE_START_PROTECT("complex_mul", return 0)
549 result = c_prod(a, b);
550 PyFPE_END_PROTECT(result)
551 return PyComplex_FromCComplex(result);
555 complex_div(PyObject *v, PyObject *w)
561 PyFPE_START_PROTECT("complex_div", return 0)
564 PyFPE_END_PROTECT(quot)
566 PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero");
569 return PyComplex_FromCComplex(quot);
573 complex_classic_div(PyObject *v, PyObject *w)
579 if (Py_DivisionWarningFlag >= 2 &&
580 PyErr_Warn(PyExc_DeprecationWarning,
581 "classic complex division") < 0)
584 PyFPE_START_PROTECT("complex_classic_div", return 0)
587 PyFPE_END_PROTECT(quot)
589 PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero");
592 return PyComplex_FromCComplex(quot);
596 complex_remainder(PyObject *v, PyObject *w)
602 if (PyErr_Warn(PyExc_DeprecationWarning,
603 "complex divmod(), // and % are deprecated") < 0)
607 div = c_quot(a, b); /* The raw divisor value. */
609 PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder");
612 div.real = floor(div.real); /* Use the floor of the real part. */
614 mod = c_diff(a, c_prod(b, div));
616 return PyComplex_FromCComplex(mod);
621 complex_divmod(PyObject *v, PyObject *w)
628 if (PyErr_Warn(PyExc_DeprecationWarning,
629 "complex divmod(), // and % are deprecated") < 0)
633 div = c_quot(a, b); /* The raw divisor value. */
635 PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()");
638 div.real = floor(div.real); /* Use the floor of the real part. */
640 mod = c_diff(a, c_prod(b, div));
641 d = PyComplex_FromCComplex(div);
642 m = PyComplex_FromCComplex(mod);
643 z = PyTuple_Pack(2, d, m);
650 complex_pow(PyObject *v, PyObject *w, PyObject *z)
659 PyErr_SetString(PyExc_ValueError, "complex modulo");
662 PyFPE_START_PROTECT("complex_pow", return 0)
665 int_exponent = (long)exponent.real;
666 if (exponent.imag == 0. && exponent.real == int_exponent)
667 p = c_powi(a,int_exponent);
669 p = c_pow(a,exponent);
672 Py_ADJUST_ERANGE2(p.real, p.imag);
674 PyErr_SetString(PyExc_ZeroDivisionError,
675 "0.0 to a negative or complex power");
678 else if (errno == ERANGE) {
679 PyErr_SetString(PyExc_OverflowError,
680 "complex exponentiation");
683 return PyComplex_FromCComplex(p);
687 complex_int_div(PyObject *v, PyObject *w)
693 if (PyErr_Warn(PyExc_DeprecationWarning,
694 "complex divmod(), // and % are deprecated") < 0)
697 t = complex_divmod(v, w);
699 r = PyTuple_GET_ITEM(t, 0);
708 complex_neg(PyComplexObject *v)
711 neg.real = -v->cval.real;
712 neg.imag = -v->cval.imag;
713 return PyComplex_FromCComplex(neg);
717 complex_pos(PyComplexObject *v)
719 if (PyComplex_CheckExact(v)) {
721 return (PyObject *)v;
724 return PyComplex_FromCComplex(v->cval);
728 complex_abs(PyComplexObject *v)
732 PyFPE_START_PROTECT("complex_abs", return 0)
733 result = c_abs(v->cval);
734 PyFPE_END_PROTECT(result)
736 if (errno == ERANGE) {
737 PyErr_SetString(PyExc_OverflowError,
738 "absolute value too large");
741 return PyFloat_FromDouble(result);
745 complex_nonzero(PyComplexObject *v)
747 return v->cval.real != 0.0 || v->cval.imag != 0.0;
751 complex_coerce(PyObject **pv, PyObject **pw)
755 if (PyInt_Check(*pw)) {
756 cval.real = (double)PyInt_AsLong(*pw);
757 *pw = PyComplex_FromCComplex(cval);
761 else if (PyLong_Check(*pw)) {
762 cval.real = PyLong_AsDouble(*pw);
763 if (cval.real == -1.0 && PyErr_Occurred())
765 *pw = PyComplex_FromCComplex(cval);
769 else if (PyFloat_Check(*pw)) {
770 cval.real = PyFloat_AsDouble(*pw);
771 *pw = PyComplex_FromCComplex(cval);
775 else if (PyComplex_Check(*pw)) {
780 return 1; /* Can't do it */
784 complex_richcompare(PyObject *v, PyObject *w, int op)
790 if (op != Py_EQ && op != Py_NE) {
791 /* for backwards compatibility, comparisons with non-numbers return
792 * NotImplemented. Only comparisons with core numeric types raise
795 if (PyInt_Check(w) || PyLong_Check(w) ||
796 PyFloat_Check(w) || PyComplex_Check(w)) {
797 PyErr_SetString(PyExc_TypeError,
798 "no ordering relation is defined "
799 "for complex numbers");
805 assert(PyComplex_Check(v));
808 if (PyInt_Check(w) || PyLong_Check(w)) {
809 /* Check for 0.0 imaginary part first to avoid the rich
810 * comparison when possible.
813 PyObject *j, *sub_res;
814 j = PyFloat_FromDouble(i.real);
818 sub_res = PyObject_RichCompare(j, w, op);
826 else if (PyFloat_Check(w)) {
827 equal = (i.real == PyFloat_AsDouble(w) && i.imag == 0.0);
829 else if (PyComplex_Check(w)) {
833 equal = (i.real == j.real && i.imag == j.imag);
839 if (equal == (op == Py_EQ))
848 Py_INCREF(Py_NotImplemented);
849 return Py_NotImplemented;
853 complex_int(PyObject *v)
855 PyErr_SetString(PyExc_TypeError,
856 "can't convert complex to int");
861 complex_long(PyObject *v)
863 PyErr_SetString(PyExc_TypeError,
864 "can't convert complex to long");
869 complex_float(PyObject *v)
871 PyErr_SetString(PyExc_TypeError,
872 "can't convert complex to float");
877 complex_conjugate(PyObject *self)
880 c = ((PyComplexObject *)self)->cval;
882 return PyComplex_FromCComplex(c);
885 PyDoc_STRVAR(complex_conjugate_doc,
886 "complex.conjugate() -> complex\n"
888 "Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
891 complex_getnewargs(PyComplexObject *v)
893 Py_complex c = v->cval;
894 return Py_BuildValue("(dd)", c.real, c.imag);
897 PyDoc_STRVAR(complex__format__doc,
898 "complex.__format__() -> str\n"
900 "Converts to a string according to format_spec.");
903 complex__format__(PyObject* self, PyObject* args)
905 PyObject *format_spec;
907 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
909 if (PyBytes_Check(format_spec))
910 return _PyComplex_FormatAdvanced(self,
911 PyBytes_AS_STRING(format_spec),
912 PyBytes_GET_SIZE(format_spec));
913 if (PyUnicode_Check(format_spec)) {
914 /* Convert format_spec to a str */
916 PyObject *str_spec = PyObject_Str(format_spec);
918 if (str_spec == NULL)
921 result = _PyComplex_FormatAdvanced(self,
922 PyBytes_AS_STRING(str_spec),
923 PyBytes_GET_SIZE(str_spec));
928 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
934 complex_is_finite(PyObject *self)
937 c = ((PyComplexObject *)self)->cval;
938 return PyBool_FromLong((long)(Py_IS_FINITE(c.real) &&
939 Py_IS_FINITE(c.imag)));
942 PyDoc_STRVAR(complex_is_finite_doc,
943 "complex.is_finite() -> bool\n"
945 "Returns True if the real and the imaginary part is finite.");
948 static PyMethodDef complex_methods[] = {
949 {"conjugate", (PyCFunction)complex_conjugate, METH_NOARGS,
950 complex_conjugate_doc},
952 {"is_finite", (PyCFunction)complex_is_finite, METH_NOARGS,
953 complex_is_finite_doc},
955 {"__getnewargs__", (PyCFunction)complex_getnewargs, METH_NOARGS},
956 {"__format__", (PyCFunction)complex__format__,
957 METH_VARARGS, complex__format__doc},
958 {NULL, NULL} /* sentinel */
961 static PyMemberDef complex_members[] = {
962 {"real", T_DOUBLE, offsetof(PyComplexObject, cval.real), READONLY,
963 "the real part of a complex number"},
964 {"imag", T_DOUBLE, offsetof(PyComplexObject, cval.imag), READONLY,
965 "the imaginary part of a complex number"},
970 complex_subtype_from_string(PyTypeObject *type, PyObject *v)
972 const char *s, *start;
974 double x=0.0, y=0.0, z;
976 #ifdef Py_USING_UNICODE
977 char *s_buffer = NULL;
981 if (PyString_Check(v)) {
982 s = PyString_AS_STRING(v);
983 len = PyString_GET_SIZE(v);
985 #ifdef Py_USING_UNICODE
986 else if (PyUnicode_Check(v)) {
987 s_buffer = (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v)+1);
988 if (s_buffer == NULL)
989 return PyErr_NoMemory();
990 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
991 PyUnicode_GET_SIZE(v),
999 else if (PyObject_AsCharBuffer(v, &s, &len)) {
1000 PyErr_SetString(PyExc_TypeError,
1001 "complex() arg is not a string");
1005 /* position on first nonblank */
1007 while (Py_ISSPACE(*s))
1010 /* Skip over possible bracket from repr(). */
1013 while (Py_ISSPACE(*s))
1017 /* a valid complex string usually takes one of the three forms:
1019 <float> - real part only
1020 <float>j - imaginary part only
1021 <float><signed-float>j - real and imaginary parts
1023 where <float> represents any numeric string that's accepted by the
1024 float constructor (including 'nan', 'inf', 'infinity', etc.), and
1025 <signed-float> is any string of the form <float> whose first
1026 character is '+' or '-'.
1028 For backwards compatibility, the extra forms
1034 are also accepted, though support for these forms may be removed from
1035 a future version of Python.
1038 /* first look for forms starting with <float> */
1039 z = PyOS_string_to_double(s, &end, NULL);
1040 if (z == -1.0 && PyErr_Occurred()) {
1041 if (PyErr_ExceptionMatches(PyExc_ValueError))
1047 /* all 4 forms starting with <float> land here */
1049 if (*s == '+' || *s == '-') {
1050 /* <float><signed-float>j | <float><sign>j */
1052 y = PyOS_string_to_double(s, &end, NULL);
1053 if (y == -1.0 && PyErr_Occurred()) {
1054 if (PyErr_ExceptionMatches(PyExc_ValueError))
1060 /* <float><signed-float>j */
1063 /* <float><sign>j */
1064 y = *s == '+' ? 1.0 : -1.0;
1067 if (!(*s == 'j' || *s == 'J'))
1071 else if (*s == 'j' || *s == 'J') {
1081 /* not starting with <float>; must be <sign>j or j */
1082 if (*s == '+' || *s == '-') {
1084 y = *s == '+' ? 1.0 : -1.0;
1090 if (!(*s == 'j' || *s == 'J'))
1095 /* trailing whitespace and closing bracket */
1096 while (Py_ISSPACE(*s))
1099 /* if there was an opening parenthesis, then the corresponding
1100 closing parenthesis should be right here */
1104 while (Py_ISSPACE(*s))
1108 /* we should now be at the end of the string */
1113 #ifdef Py_USING_UNICODE
1115 PyMem_FREE(s_buffer);
1117 return complex_subtype_from_doubles(type, x, y);
1120 PyErr_SetString(PyExc_ValueError,
1121 "complex() arg is a malformed string");
1123 #ifdef Py_USING_UNICODE
1125 PyMem_FREE(s_buffer);
1131 complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1133 PyObject *r, *i, *tmp;
1134 PyNumberMethods *nbr, *nbi = NULL;
1137 int cr_is_complex = 0;
1138 int ci_is_complex = 0;
1139 static char *kwlist[] = {"real", "imag", 0};
1143 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:complex", kwlist,
1147 /* Special-case for a single argument when type(arg) is complex. */
1148 if (PyComplex_CheckExact(r) && i == NULL &&
1149 type == &PyComplex_Type) {
1150 /* Note that we can't know whether it's safe to return
1151 a complex *subclass* instance as-is, hence the restriction
1152 to exact complexes here. If either the input or the
1153 output is a complex subclass, it will be handled below
1154 as a non-orthogonal vector. */
1158 if (PyString_Check(r) || PyUnicode_Check(r)) {
1160 PyErr_SetString(PyExc_TypeError,
1161 "complex() can't take second arg"
1162 " if first is a string");
1165 return complex_subtype_from_string(type, r);
1167 if (i != NULL && (PyString_Check(i) || PyUnicode_Check(i))) {
1168 PyErr_SetString(PyExc_TypeError,
1169 "complex() second arg can't be a string");
1173 tmp = try_complex_special_method(r);
1178 else if (PyErr_Occurred()) {
1182 nbr = r->ob_type->tp_as_number;
1184 nbi = i->ob_type->tp_as_number;
1185 if (nbr == NULL || nbr->nb_float == NULL ||
1186 ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
1187 PyErr_SetString(PyExc_TypeError,
1188 "complex() argument must be a string or a number");
1195 /* If we get this far, then the "real" and "imag" parts should
1196 both be treated as numbers, and the constructor should return a
1197 complex number equal to (real + imag*1j).
1199 Note that we do NOT assume the input to already be in canonical
1200 form; the "real" and "imag" parts might themselves be complex
1201 numbers, which slightly complicates the code below. */
1202 if (PyComplex_Check(r)) {
1203 /* Note that if r is of a complex subtype, we're only
1204 retaining its real & imag parts here, and the return
1205 value is (properly) of the builtin complex type. */
1206 cr = ((PyComplexObject*)r)->cval;
1213 /* The "real" part really is entirely real, and contributes
1214 nothing in the imaginary direction.
1215 Just treat it as a double. */
1216 tmp = PyNumber_Float(r);
1218 /* r was a newly created complex number, rather
1219 than the original "real" argument. */
1224 if (!PyFloat_Check(tmp)) {
1225 PyErr_SetString(PyExc_TypeError,
1226 "float(r) didn't return a float");
1230 cr.real = PyFloat_AsDouble(tmp);
1231 cr.imag = 0.0; /* Shut up compiler warning */
1237 else if (PyComplex_Check(i)) {
1238 ci = ((PyComplexObject*)i)->cval;
1241 /* The "imag" part really is entirely imaginary, and
1242 contributes nothing in the real direction.
1243 Just treat it as a double. */
1244 tmp = (*nbi->nb_float)(i);
1247 ci.real = PyFloat_AsDouble(tmp);
1250 /* If the input was in canonical form, then the "real" and "imag"
1251 parts are real numbers, so that ci.imag and cr.imag are zero.
1252 We need this correction in case they were not real numbers. */
1254 if (ci_is_complex) {
1257 if (cr_is_complex) {
1260 return complex_subtype_from_doubles(type, cr.real, ci.real);
1263 PyDoc_STRVAR(complex_doc,
1264 "complex(real[, imag]) -> complex number\n"
1266 "Create a complex number from a real part and an optional imaginary part.\n"
1267 "This is equivalent to (real + imag*1j) where imag defaults to 0.");
1269 static PyNumberMethods complex_as_number = {
1270 (binaryfunc)complex_add, /* nb_add */
1271 (binaryfunc)complex_sub, /* nb_subtract */
1272 (binaryfunc)complex_mul, /* nb_multiply */
1273 (binaryfunc)complex_classic_div, /* nb_divide */
1274 (binaryfunc)complex_remainder, /* nb_remainder */
1275 (binaryfunc)complex_divmod, /* nb_divmod */
1276 (ternaryfunc)complex_pow, /* nb_power */
1277 (unaryfunc)complex_neg, /* nb_negative */
1278 (unaryfunc)complex_pos, /* nb_positive */
1279 (unaryfunc)complex_abs, /* nb_absolute */
1280 (inquiry)complex_nonzero, /* nb_nonzero */
1287 complex_coerce, /* nb_coerce */
1288 complex_int, /* nb_int */
1289 complex_long, /* nb_long */
1290 complex_float, /* nb_float */
1293 0, /* nb_inplace_add */
1294 0, /* nb_inplace_subtract */
1295 0, /* nb_inplace_multiply*/
1296 0, /* nb_inplace_divide */
1297 0, /* nb_inplace_remainder */
1298 0, /* nb_inplace_power */
1299 0, /* nb_inplace_lshift */
1300 0, /* nb_inplace_rshift */
1301 0, /* nb_inplace_and */
1302 0, /* nb_inplace_xor */
1303 0, /* nb_inplace_or */
1304 (binaryfunc)complex_int_div, /* nb_floor_divide */
1305 (binaryfunc)complex_div, /* nb_true_divide */
1306 0, /* nb_inplace_floor_divide */
1307 0, /* nb_inplace_true_divide */
1310 PyTypeObject PyComplex_Type = {
1311 PyVarObject_HEAD_INIT(&PyType_Type, 0)
1313 sizeof(PyComplexObject),
1315 complex_dealloc, /* tp_dealloc */
1316 (printfunc)complex_print, /* tp_print */
1320 (reprfunc)complex_repr, /* tp_repr */
1321 &complex_as_number, /* tp_as_number */
1322 0, /* tp_as_sequence */
1323 0, /* tp_as_mapping */
1324 (hashfunc)complex_hash, /* tp_hash */
1326 (reprfunc)complex_str, /* tp_str */
1327 PyObject_GenericGetAttr, /* tp_getattro */
1328 0, /* tp_setattro */
1329 0, /* tp_as_buffer */
1330 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
1331 Py_TPFLAGS_BASETYPE, /* tp_flags */
1332 complex_doc, /* tp_doc */
1333 0, /* tp_traverse */
1335 complex_richcompare, /* tp_richcompare */
1336 0, /* tp_weaklistoffset */
1338 0, /* tp_iternext */
1339 complex_methods, /* tp_methods */
1340 complex_members, /* tp_members */
1344 0, /* tp_descr_get */
1345 0, /* tp_descr_set */
1346 0, /* tp_dictoffset */
1348 PyType_GenericAlloc, /* tp_alloc */
1349 complex_new, /* tp_new */
1350 PyObject_Del, /* tp_free */