complexobject.c 30.4 KB
Newer Older
1

2 3 4 5
/* Complex object implementation */

/* Borrows heavily from floatobject.c */

6 7
/* Submitted by Jim Hugunin */

8
#include "Python.h"
9
#include "structmember.h"
10

11 12
#ifndef WITHOUT_COMPLEX

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/* Precisions used by repr() and str(), respectively.

   The repr() precision (17 significant decimal digits) is the minimal number
   that is guaranteed to have enough precision so that if the number is read
   back in the exact same binary value is recreated.  This is true for IEEE
   floating point by design, and also happens to work for all other modern
   hardware.

   The str() precision is chosen so that in most cases, the rounding noise
   created by various operations is suppressed, while giving plenty of
   precision for practical use.
*/

#define PREC_REPR	17
#define PREC_STR	12
28 29 30

/* elementary operations on complex numbers */

Guido van Rossum's avatar
Guido van Rossum committed
31
static Py_complex c_1 = {1., 0.};
32

33 34
Py_complex
c_sum(Py_complex a, Py_complex b)
35
{
Guido van Rossum's avatar
Guido van Rossum committed
36
	Py_complex r;
37 38 39 40 41
	r.real = a.real + b.real;
	r.imag = a.imag + b.imag;
	return r;
}

42 43
Py_complex
c_diff(Py_complex a, Py_complex b)
44
{
Guido van Rossum's avatar
Guido van Rossum committed
45
	Py_complex r;
46 47 48 49 50
	r.real = a.real - b.real;
	r.imag = a.imag - b.imag;
	return r;
}

51 52
Py_complex
c_neg(Py_complex a)
53
{
Guido van Rossum's avatar
Guido van Rossum committed
54
	Py_complex r;
55 56 57 58 59
	r.real = -a.real;
	r.imag = -a.imag;
	return r;
}

60 61
Py_complex
c_prod(Py_complex a, Py_complex b)
62
{
Guido van Rossum's avatar
Guido van Rossum committed
63
	Py_complex r;
64 65 66 67 68
	r.real = a.real*b.real - a.imag*b.imag;
	r.imag = a.real*b.imag + a.imag*b.real;
	return r;
}

69 70
Py_complex
c_quot(Py_complex a, Py_complex b)
71
{
72 73 74 75 76 77 78
	/******************************************************************
	This was the original algorithm.  It's grossly prone to spurious
	overflow and underflow errors.  It also merrily divides by 0 despite
	checking for that(!).  The code still serves a doc purpose here, as
	the algorithm following is a simple by-cases transformation of this
	one:

Guido van Rossum's avatar
Guido van Rossum committed
79
	Py_complex r;
80 81
	double d = b.real*b.real + b.imag*b.imag;
	if (d == 0.)
82
		errno = EDOM;
83 84 85
	r.real = (a.real*b.real + a.imag*b.imag)/d;
	r.imag = (a.imag*b.real - a.real*b.imag)/d;
	return r;
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
	******************************************************************/

	/* This algorithm is better, and is pretty obvious:  first divide the
	 * numerators and denominator by whichever of {b.real, b.imag} has
	 * larger magnitude.  The earliest reference I found was to CACM
	 * Algorithm 116 (Complex Division, Robert L. Smith, Stanford
	 * University).  As usual, though, we're still ignoring all IEEE
	 * endcases.
	 */
	 Py_complex r;	/* the result */
 	 const double abs_breal = b.real < 0 ? -b.real : b.real;
	 const double abs_bimag = b.imag < 0 ? -b.imag : b.imag;

	 if (abs_breal >= abs_bimag) {
 		/* divide tops and bottom by b.real */
	 	if (abs_breal == 0.0) {
	 		errno = EDOM;
	 		r.real = r.imag = 0.0;
	 	}
	 	else {
	 		const double ratio = b.imag / b.real;
	 		const double denom = b.real + b.imag * ratio;
	 		r.real = (a.real + a.imag * ratio) / denom;
	 		r.imag = (a.imag - a.real * ratio) / denom;
	 	}
	}
	else {
		/* divide tops and bottom by b.imag */
		const double ratio = b.real / b.imag;
		const double denom = b.real * ratio + b.imag;
		assert(b.imag != 0.0);
		r.real = (a.real * ratio + a.imag) / denom;
		r.imag = (a.imag * ratio - a.real) / denom;
	}
	return r;
121 122
}

123 124
Py_complex
c_pow(Py_complex a, Py_complex b)
125
{
Guido van Rossum's avatar
Guido van Rossum committed
126
	Py_complex r;
127 128 129 130 131 132 133
	double vabs,len,at,phase;
	if (b.real == 0. && b.imag == 0.) {
		r.real = 1.;
		r.imag = 0.;
	}
	else if (a.real == 0. && a.imag == 0.) {
		if (b.imag != 0. || b.real < 0.)
134
			errno = EDOM;
135 136 137 138 139 140
		r.real = 0.;
		r.imag = 0.;
	}
	else {
		vabs = hypot(a.real,a.imag);
		len = pow(vabs,b.real);
141
		at = atan2(a.imag, a.real);
142 143 144 145 146 147 148 149 150 151 152
		phase = at*b.real;
		if (b.imag != 0.0) {
			len /= exp(at*b.imag);
			phase += b.imag*log(vabs);
		}
		r.real = len*cos(phase);
		r.imag = len*sin(phase);
	}
	return r;
}

153 154
static Py_complex
c_powu(Py_complex x, long n)
155
{
156
	Py_complex r, p;
157
	long mask = 1;
158 159
	r = c_1;
	p = x;
160 161 162 163 164 165 166 167 168
	while (mask > 0 && n >= mask) {
		if (n & mask)
			r = c_prod(r,p);
		mask <<= 1;
		p = c_prod(p,p);
	}
	return r;
}

169 170
static Py_complex
c_powi(Py_complex x, long n)
171
{
Guido van Rossum's avatar
Guido van Rossum committed
172
	Py_complex cn;
173 174 175 176 177 178 179 180 181 182 183 184 185

	if (n > 100 || n < -100) {
		cn.real = (double) n;
		cn.imag = 0.;
		return c_pow(x,cn);
	}
	else if (n > 0)
		return c_powu(x,n);
	else
		return c_quot(c_1,c_powu(x,-n));

}

186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
double
c_abs(Py_complex z)
{
	/* sets errno = ERANGE on overflow;  otherwise errno = 0 */
	double result;

	if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) {
		/* C99 rules: if either the real or the imaginary part is an
		   infinity, return infinity, even if the other part is a
		   NaN. */
		if (Py_IS_INFINITY(z.real)) {
			result = fabs(z.real);
			errno = 0;
			return result;
		}
		if (Py_IS_INFINITY(z.imag)) {
			result = fabs(z.imag);
			errno = 0;
			return result;
		}
		/* either the real or imaginary part is a NaN,
		   and neither is infinite. Result should be NaN. */
		return Py_NAN;
	}
	result = hypot(z.real, z.imag);
	if (!Py_IS_FINITE(result))
		errno = ERANGE;
	else
		errno = 0;
	return result;
}

218 219 220 221 222
static PyObject *
complex_subtype_from_c_complex(PyTypeObject *type, Py_complex cval)
{
	PyObject *op;

223
	op = type->tp_alloc(type, 0);
224 225 226 227 228
	if (op != NULL)
		((PyComplexObject *)op)->cval = cval;
	return op;
}

229
PyObject *
Fred Drake's avatar
Fred Drake committed
230
PyComplex_FromCComplex(Py_complex cval)
231
{
232 233
	register PyComplexObject *op;

234
	/* Inline PyObject_New */
235
	op = (PyComplexObject *) PyObject_MALLOC(sizeof(PyComplexObject));
236
	if (op == NULL)
237
		return PyErr_NoMemory();
238
	PyObject_INIT(op, &PyComplex_Type);
239
	op->cval = cval;
240
	return (PyObject *) op;
241 242
}

243 244 245 246 247 248 249 250 251
static PyObject *
complex_subtype_from_doubles(PyTypeObject *type, double real, double imag)
{
	Py_complex c;
	c.real = real;
	c.imag = imag;
	return complex_subtype_from_c_complex(type, c);
}

252
PyObject *
Fred Drake's avatar
Fred Drake committed
253
PyComplex_FromDoubles(double real, double imag)
254 255 256 257 258
{
	Py_complex c;
	c.real = real;
	c.imag = imag;
	return PyComplex_FromCComplex(c);
259 260 261
}

double
Fred Drake's avatar
Fred Drake committed
262
PyComplex_RealAsDouble(PyObject *op)
263 264 265
{
	if (PyComplex_Check(op)) {
		return ((PyComplexObject *)op)->cval.real;
Fred Drake's avatar
Fred Drake committed
266 267
	}
	else {
268 269
		return PyFloat_AsDouble(op);
	}
270 271 272
}

double
Fred Drake's avatar
Fred Drake committed
273
PyComplex_ImagAsDouble(PyObject *op)
274 275 276
{
	if (PyComplex_Check(op)) {
		return ((PyComplexObject *)op)->cval.imag;
Fred Drake's avatar
Fred Drake committed
277 278
	}
	else {
279 280
		return 0.0;
	}
281 282
}

Guido van Rossum's avatar
Guido van Rossum committed
283
Py_complex
Fred Drake's avatar
Fred Drake committed
284
PyComplex_AsCComplex(PyObject *op)
285
{
Guido van Rossum's avatar
Guido van Rossum committed
286
	Py_complex cv;
287 288 289 290 291
	PyObject *newop = NULL;
	static PyObject *complex_str = NULL;

	assert(op);
	/* If op is already of type PyComplex_Type, return its value */
Guido van Rossum's avatar
Guido van Rossum committed
292 293
	if (PyComplex_Check(op)) {
		return ((PyComplexObject *)op)->cval;
Fred Drake's avatar
Fred Drake committed
294
	}
295
	/* If not, use op's __complex__  method, if it exists */
296

297 298 299
	/* return -1 on failure */
	cv.real = -1.;
	cv.imag = 0.;
300 301

	if (complex_str == NULL) {
302
		if (!(complex_str = PyString_InternFromString("__complex__")))
303 304
			return cv;
	}
305 306 307
	
	if (PyInstance_Check(op)) {
		/* this can go away in python 3000 */
308
		if (PyObject_HasAttr(op, complex_str)) {
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
			newop = PyObject_CallMethod(op, "__complex__", NULL);
			if (!newop)
				return cv;
		}
		/* else try __float__ */
	} else {
		PyObject *complexfunc;
		complexfunc = _PyType_Lookup(op->ob_type, complex_str);
		/* complexfunc is a borrowed reference */
		if (complexfunc) {
			newop = PyObject_CallFunctionObjArgs(complexfunc, op, NULL);
			if (!newop)
				return cv;
		}
	}

	if (newop) {
		if (!PyComplex_Check(newop)) {
			PyErr_SetString(PyExc_TypeError,
				"__complex__ should return a complex object");
			Py_DECREF(newop);
			return cv;
		}
		cv = ((PyComplexObject *)newop)->cval;
		Py_DECREF(newop);
		return cv;
	}
	/* If neither of the above works, interpret op as a float giving the
	   real part of the result, and fill in the imaginary part as 0. */
Fred Drake's avatar
Fred Drake committed
338
	else {
339
		/* PyFloat_AsDouble will return -1 on failure */
Guido van Rossum's avatar
Guido van Rossum committed
340 341
		cv.real = PyFloat_AsDouble(op);
		return cv;
342
	}
Guido van Rossum's avatar
Guido van Rossum committed
343 344
}

345
static void
Fred Drake's avatar
Fred Drake committed
346
complex_dealloc(PyObject *op)
347
{
348
	op->ob_type->tp_free(op);
349 350 351
}


Mark Dickinson's avatar
Mark Dickinson committed
352
static PyObject *
353
complex_format(PyComplexObject *v, int precision, char format_code)
354
{
Mark Dickinson's avatar
Mark Dickinson committed
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
	PyObject *result = NULL;
	Py_ssize_t len;

	/* If these are non-NULL, they'll need to be freed. */
	char *pre = NULL;
	char *im = NULL;
	char *buf = NULL;

	/* These do not need to be freed. re is either an alias
	   for pre or a pointer to a constant.  lead and tail
	   are pointers to constants. */
	char *re = NULL;
	char *lead = "";
	char *tail = "";

	if (v->cval.real == 0. && copysign(1.0, v->cval.real)==1.0) {
		re = "";
		im = PyOS_double_to_string(v->cval.imag, format_code,
373
					   precision, 0, NULL);
Mark Dickinson's avatar
Mark Dickinson committed
374 375 376
		if (!im) {
			PyErr_NoMemory();
			goto done;
377
		}
378
	} else {
379
		/* Format imaginary part with sign, real part without */
Mark Dickinson's avatar
Mark Dickinson committed
380
		pre = PyOS_double_to_string(v->cval.real, format_code,
381
					    precision, 0, NULL);
Mark Dickinson's avatar
Mark Dickinson committed
382 383 384
		if (!pre) {
			PyErr_NoMemory();
			goto done;
385
		}
Mark Dickinson's avatar
Mark Dickinson committed
386 387 388
		re = pre;

		im = PyOS_double_to_string(v->cval.imag, format_code,
389
					   precision, Py_DTSF_SIGN, NULL);
Mark Dickinson's avatar
Mark Dickinson committed
390 391 392
		if (!im) {
			PyErr_NoMemory();
			goto done;
393
		}
Mark Dickinson's avatar
Mark Dickinson committed
394 395 396 397 398 399 400 401 402 403
		lead = "(";
		tail = ")";
	}
	/* Alloc the final buffer. Add one for the "j" in the format string,
	   and one for the trailing zero. */
	len = strlen(lead) + strlen(re) + strlen(im) + strlen(tail) + 2;
	buf = PyMem_Malloc(len);
	if (!buf) {
		PyErr_NoMemory();
		goto done;
404
	}
Mark Dickinson's avatar
Mark Dickinson committed
405 406 407 408 409 410 411 412
	PyOS_snprintf(buf, len, "%s%s%sj%s", lead, re, im, tail);
	result = PyString_FromString(buf);
  done:
	PyMem_Free(im);
	PyMem_Free(pre);
	PyMem_Free(buf);

	return result;
413 414 415
}

static int
Fred Drake's avatar
Fred Drake committed
416
complex_print(PyComplexObject *v, FILE *fp, int flags)
417
{
Mark Dickinson's avatar
Mark Dickinson committed
418 419
	PyObject *formatv;
	char *buf;
420 421 422 423
        if (flags & Py_PRINT_RAW)
            formatv = complex_format(v, PyFloat_STR_PRECISION, 'g');
        else
            formatv = complex_format(v, 0, 'r');
Mark Dickinson's avatar
Mark Dickinson committed
424 425 426
	if (formatv == NULL)
		return -1;
	buf = PyString_AS_STRING(formatv);
427
	Py_BEGIN_ALLOW_THREADS
428
	fputs(buf, fp);
429
	Py_END_ALLOW_THREADS
Mark Dickinson's avatar
Mark Dickinson committed
430
	Py_DECREF(formatv);
431 432 433
	return 0;
}

434
static PyObject *
Fred Drake's avatar
Fred Drake committed
435
complex_repr(PyComplexObject *v)
436
{
437
    return complex_format(v, 0, 'r');
438 439 440 441 442
}

static PyObject *
complex_str(PyComplexObject *v)
{
443
    return complex_format(v, PyFloat_STR_PRECISION, 'g');
444 445 446
}

static long
Fred Drake's avatar
Fred Drake committed
447
complex_hash(PyComplexObject *v)
448
{
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465
	long hashreal, hashimag, combined;
	hashreal = _Py_HashDouble(v->cval.real);
	if (hashreal == -1)
		return -1;
	hashimag = _Py_HashDouble(v->cval.imag);
	if (hashimag == -1)
		return -1;
	/* Note:  if the imaginary part is 0, hashimag is 0 now,
	 * so the following returns hashreal unchanged.  This is
	 * important because numbers of different types that
	 * compare equal must have the same hash value, so that
	 * hash(x + 0*j) must equal hash(x).
	 */
	combined = hashreal + 1000003 * hashimag;
	if (combined == -1)
		combined = -2;
	return combined;
466 467
}

468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
/* This macro may return! */
#define TO_COMPLEX(obj, c) \
	if (PyComplex_Check(obj)) \
		c = ((PyComplexObject *)(obj))->cval; \
	else if (to_complex(&(obj), &(c)) < 0) \
		return (obj)

static int
to_complex(PyObject **pobj, Py_complex *pc)
{
    PyObject *obj = *pobj;

    pc->real = pc->imag = 0.0;
    if (PyInt_Check(obj)) {
        pc->real = PyInt_AS_LONG(obj);
        return 0;
    }
    if (PyLong_Check(obj)) {
        pc->real = PyLong_AsDouble(obj);
        if (pc->real == -1.0 && PyErr_Occurred()) {
            *pobj = NULL;
            return -1;
        }
        return 0;
    }
    if (PyFloat_Check(obj)) {
        pc->real = PyFloat_AsDouble(obj);
        return 0;
    }
    Py_INCREF(Py_NotImplemented);
    *pobj = Py_NotImplemented;
    return -1;
}
		

503
static PyObject *
Fred Drake's avatar
Fred Drake committed
504
complex_add(PyComplexObject *v, PyComplexObject *w)
505
{
506 507 508
	Py_complex result;
	PyFPE_START_PROTECT("complex_add", return 0)
	result = c_sum(v->cval,w->cval);
509
	PyFPE_END_PROTECT(result)
510
	return PyComplex_FromCComplex(result);
511 512
}

513
static PyObject *
Fred Drake's avatar
Fred Drake committed
514
complex_sub(PyComplexObject *v, PyComplexObject *w)
515
{
516 517 518
	Py_complex result;
	PyFPE_START_PROTECT("complex_sub", return 0)
	result = c_diff(v->cval,w->cval);
519
	PyFPE_END_PROTECT(result)
520
	return PyComplex_FromCComplex(result);
521 522
}

523
static PyObject *
Fred Drake's avatar
Fred Drake committed
524
complex_mul(PyComplexObject *v, PyComplexObject *w)
525
{
526 527 528
	Py_complex result;
	PyFPE_START_PROTECT("complex_mul", return 0)
	result = c_prod(v->cval,w->cval);
529
	PyFPE_END_PROTECT(result)
530
	return PyComplex_FromCComplex(result);
531 532
}

533
static PyObject *
Fred Drake's avatar
Fred Drake committed
534
complex_div(PyComplexObject *v, PyComplexObject *w)
535
{
Guido van Rossum's avatar
Guido van Rossum committed
536
	Py_complex quot;
537

538
	PyFPE_START_PROTECT("complex_div", return 0)
539
	errno = 0;
540
	quot = c_quot(v->cval,w->cval);
541
	PyFPE_END_PROTECT(quot)
542
	if (errno == EDOM) {
543
		PyErr_SetString(PyExc_ZeroDivisionError, "complex division");
544 545
		return NULL;
	}
546
	return PyComplex_FromCComplex(quot);
547 548
}

549 550 551 552 553
static PyObject *
complex_classic_div(PyComplexObject *v, PyComplexObject *w)
{
	Py_complex quot;

554
	if (Py_DivisionWarningFlag >= 2 &&
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569
	    PyErr_Warn(PyExc_DeprecationWarning,
		       "classic complex division") < 0)
		return NULL;

	PyFPE_START_PROTECT("complex_classic_div", return 0)
	errno = 0;
	quot = c_quot(v->cval,w->cval);
	PyFPE_END_PROTECT(quot)
	if (errno == EDOM) {
		PyErr_SetString(PyExc_ZeroDivisionError, "complex division");
		return NULL;
	}
	return PyComplex_FromCComplex(quot);
}

570
static PyObject *
Fred Drake's avatar
Fred Drake committed
571
complex_remainder(PyComplexObject *v, PyComplexObject *w)
572
{
Georg Brandl's avatar
Georg Brandl committed
573
	Py_complex div, mod;
574 575 576 577 578

	if (PyErr_Warn(PyExc_DeprecationWarning,
		       "complex divmod(), // and % are deprecated") < 0)
		return NULL;

579
	errno = 0;
580
	div = c_quot(v->cval,w->cval); /* The raw divisor value. */
581
	if (errno == EDOM) {
582
		PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder");
583 584 585 586 587 588
		return NULL;
	}
	div.real = floor(div.real); /* Use the floor of the real part. */
	div.imag = 0.0;
	mod = c_diff(v->cval, c_prod(w->cval, div));

589
	return PyComplex_FromCComplex(mod);
590 591 592
}


593
static PyObject *
Fred Drake's avatar
Fred Drake committed
594
complex_divmod(PyComplexObject *v, PyComplexObject *w)
595
{
Georg Brandl's avatar
Georg Brandl committed
596
	Py_complex div, mod;
597
	PyObject *d, *m, *z;
Guido van Rossum's avatar
Guido van Rossum committed
598 599

	if (PyErr_Warn(PyExc_DeprecationWarning,
600
		       "complex divmod(), // and % are deprecated") < 0)
Guido van Rossum's avatar
Guido van Rossum committed
601 602
		return NULL;

603
	errno = 0;
604
	div = c_quot(v->cval,w->cval); /* The raw divisor value. */
605
	if (errno == EDOM) {
606
		PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()");
607 608 609 610 611
		return NULL;
	}
	div.real = floor(div.real); /* Use the floor of the real part. */
	div.imag = 0.0;
	mod = c_diff(v->cval, c_prod(w->cval, div));
612 613
	d = PyComplex_FromCComplex(div);
	m = PyComplex_FromCComplex(mod);
614
	z = PyTuple_Pack(2, d, m);
615 616 617 618
	Py_XDECREF(d);
	Py_XDECREF(m);
	return z;
}
619

620
static PyObject *
621
complex_pow(PyObject *v, PyObject *w, PyObject *z)
622
{
Guido van Rossum's avatar
Guido van Rossum committed
623 624
	Py_complex p;
	Py_complex exponent;
625
	long int_exponent;
626
	Py_complex a, b;
Georg Brandl's avatar
Georg Brandl committed
627 628
	TO_COMPLEX(v, a);
	TO_COMPLEX(w, b);
629

630
 	if (z!=Py_None) {
631
		PyErr_SetString(PyExc_ValueError, "complex modulo");
632 633
		return NULL;
	}
634
	PyFPE_START_PROTECT("complex_pow", return 0)
635
	errno = 0;
636
	exponent = b;
637 638
	int_exponent = (long)exponent.real;
	if (exponent.imag == 0. && exponent.real == int_exponent)
639
		p = c_powi(a,int_exponent);
640
	else
641
		p = c_pow(a,exponent);
642

643
	PyFPE_END_PROTECT(p)
644 645 646
	Py_ADJUST_ERANGE2(p.real, p.imag);
	if (errno == EDOM) {
		PyErr_SetString(PyExc_ZeroDivisionError,
647
				"0.0 to a negative or complex power");
648 649
		return NULL;
	}
650 651
	else if (errno == ERANGE) {
		PyErr_SetString(PyExc_OverflowError,
652
				"complex exponentiation");
653 654
		return NULL;
	}
655
	return PyComplex_FromCComplex(p);
656 657
}

658 659 660 661 662
static PyObject *
complex_int_div(PyComplexObject *v, PyComplexObject *w)
{
	PyObject *t, *r;
	
663 664 665 666
	if (PyErr_Warn(PyExc_DeprecationWarning,
		       "complex divmod(), // and % are deprecated") < 0)
		return NULL;

667 668 669 670 671 672 673 674 675 676
	t = complex_divmod(v, w);
	if (t != NULL) {
		r = PyTuple_GET_ITEM(t, 0);
		Py_INCREF(r);
		Py_DECREF(t);
		return r;
	}
	return NULL;
}

677
static PyObject *
Fred Drake's avatar
Fred Drake committed
678
complex_neg(PyComplexObject *v)
679
{
Guido van Rossum's avatar
Guido van Rossum committed
680
	Py_complex neg;
681 682
	neg.real = -v->cval.real;
	neg.imag = -v->cval.imag;
683
	return PyComplex_FromCComplex(neg);
684 685
}

686
static PyObject *
Fred Drake's avatar
Fred Drake committed
687
complex_pos(PyComplexObject *v)
688
{
689 690 691 692 693 694
	if (PyComplex_CheckExact(v)) {
		Py_INCREF(v);
		return (PyObject *)v;
	}
	else
		return PyComplex_FromCComplex(v->cval);
695 696
}

697
static PyObject *
Fred Drake's avatar
Fred Drake committed
698
complex_abs(PyComplexObject *v)
699
{
700
	double result;
701

702
	PyFPE_START_PROTECT("complex_abs", return 0)
703
	result = c_abs(v->cval);
704
	PyFPE_END_PROTECT(result)
705 706 707 708 709 710

	if (errno == ERANGE) {
		PyErr_SetString(PyExc_OverflowError,
				"absolute value too large");
		return NULL;
	}
711
	return PyFloat_FromDouble(result);
712 713 714
}

static int
Fred Drake's avatar
Fred Drake committed
715
complex_nonzero(PyComplexObject *v)
716
{
717
	return v->cval.real != 0.0 || v->cval.imag != 0.0;
718 719 720
}

static int
Fred Drake's avatar
Fred Drake committed
721
complex_coerce(PyObject **pv, PyObject **pw)
722
{
Guido van Rossum's avatar
Guido van Rossum committed
723
	Py_complex cval;
724
	cval.imag = 0.;
725 726 727 728
	if (PyInt_Check(*pw)) {
		cval.real = (double)PyInt_AsLong(*pw);
		*pw = PyComplex_FromCComplex(cval);
		Py_INCREF(*pv);
729 730
		return 0;
	}
731 732
	else if (PyLong_Check(*pw)) {
		cval.real = PyLong_AsDouble(*pw);
733 734
		if (cval.real == -1.0 && PyErr_Occurred())
			return -1;
735 736
		*pw = PyComplex_FromCComplex(cval);
		Py_INCREF(*pv);
737 738
		return 0;
	}
739 740 741 742
	else if (PyFloat_Check(*pw)) {
		cval.real = PyFloat_AsDouble(*pw);
		*pw = PyComplex_FromCComplex(cval);
		Py_INCREF(*pv);
743 744
		return 0;
	}
745 746 747 748 749
	else if (PyComplex_Check(*pw)) {
		Py_INCREF(*pv);
		Py_INCREF(*pw);
		return 0;
	}
750 751 752
	return 1; /* Can't do it */
}

753 754 755 756 757 758 759 760 761 762 763 764 765 766
static PyObject *
complex_richcompare(PyObject *v, PyObject *w, int op)
{
	int c;
	Py_complex i, j;
	PyObject *res;

	c = PyNumber_CoerceEx(&v, &w);
	if (c < 0)
		return NULL;
	if (c > 0) {
		Py_INCREF(Py_NotImplemented);
		return Py_NotImplemented;
	}
767 768
	/* Make sure both arguments are complex. */
	if (!(PyComplex_Check(v) && PyComplex_Check(w))) {
769 770 771 772 773 774 775 776 777 778 779
		Py_DECREF(v);
		Py_DECREF(w);
		Py_INCREF(Py_NotImplemented);
		return Py_NotImplemented;
	}

	i = ((PyComplexObject *)v)->cval;
	j = ((PyComplexObject *)w)->cval;
	Py_DECREF(v);
	Py_DECREF(w);

780 781
	if (op != Py_EQ && op != Py_NE) {
		PyErr_SetString(PyExc_TypeError,
782
			"no ordering relation is defined for complex numbers");
783 784 785
		return NULL;
	}

786 787 788 789 790 791 792 793 794
	if ((i.real == j.real && i.imag == j.imag) == (op == Py_EQ))
		res = Py_True;
	else
		res = Py_False;

	Py_INCREF(res);
	return res;
}

795
static PyObject *
Fred Drake's avatar
Fred Drake committed
796
complex_int(PyObject *v)
797
{
798
	PyErr_SetString(PyExc_TypeError,
799
		   "can't convert complex to int");
800
	return NULL;
801 802
}

803
static PyObject *
Fred Drake's avatar
Fred Drake committed
804
complex_long(PyObject *v)
805
{
806
	PyErr_SetString(PyExc_TypeError,
807
		   "can't convert complex to long");
808
	return NULL;
809 810
}

811
static PyObject *
Fred Drake's avatar
Fred Drake committed
812
complex_float(PyObject *v)
813
{
814
	PyErr_SetString(PyExc_TypeError,
815
		   "can't convert complex to float");
816
	return NULL;
817 818
}

819
static PyObject *
820
complex_conjugate(PyObject *self)
821
{
822
	Py_complex c;
823
	c = ((PyComplexObject *)self)->cval;
824
	c.imag = -c.imag;
825
	return PyComplex_FromCComplex(c);
826 827
}

828 829 830 831 832
PyDoc_STRVAR(complex_conjugate_doc,
"complex.conjugate() -> complex\n"
"\n"
"Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");

833 834 835
static PyObject *
complex_getnewargs(PyComplexObject *v)
{
836 837
	Py_complex c = v->cval;
	return Py_BuildValue("(dd)", c.real, c.imag);
838 839
}

840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874
PyDoc_STRVAR(complex__format__doc,
"complex.__format__() -> str\n"
"\n"
"Converts to a string according to format_spec.");

static PyObject *
complex__format__(PyObject* self, PyObject* args)
{
    PyObject *format_spec;

    if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
        return NULL;
    if (PyBytes_Check(format_spec))
        return _PyComplex_FormatAdvanced(self,
                                         PyBytes_AS_STRING(format_spec),
                                         PyBytes_GET_SIZE(format_spec));
    if (PyUnicode_Check(format_spec)) {
        /* Convert format_spec to a str */
        PyObject *result;
        PyObject *str_spec = PyObject_Str(format_spec);

        if (str_spec == NULL)
            return NULL;

        result = _PyComplex_FormatAdvanced(self,
                                           PyBytes_AS_STRING(str_spec),
                                           PyBytes_GET_SIZE(str_spec));

        Py_DECREF(str_spec);
        return result;
    }
    PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
    return NULL;
}

875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890
#if 0
static PyObject *
complex_is_finite(PyObject *self)
{
	Py_complex c;
	c = ((PyComplexObject *)self)->cval;
	return PyBool_FromLong((long)(Py_IS_FINITE(c.real) &&
				      Py_IS_FINITE(c.imag)));
}

PyDoc_STRVAR(complex_is_finite_doc,
"complex.is_finite() -> bool\n"
"\n"
"Returns True if the real and the imaginary part is finite.");
#endif

891
static PyMethodDef complex_methods[] = {
892 893
	{"conjugate",	(PyCFunction)complex_conjugate,	METH_NOARGS,
	 complex_conjugate_doc},
894 895 896 897
#if 0
	{"is_finite",	(PyCFunction)complex_is_finite,	METH_NOARGS,
	 complex_is_finite_doc},
#endif
898
	{"__getnewargs__",	(PyCFunction)complex_getnewargs,	METH_NOARGS},
899 900
	{"__format__",          (PyCFunction)complex__format__,
                                           METH_VARARGS, complex__format__doc},
901 902 903
	{NULL,		NULL}		/* sentinel */
};

904
static PyMemberDef complex_members[] = {
905
	{"real", T_DOUBLE, offsetof(PyComplexObject, cval.real), READONLY,
906
	 "the real part of a complex number"},
907
	{"imag", T_DOUBLE, offsetof(PyComplexObject, cval.imag), READONLY,
908
	 "the imaginary part of a complex number"},
909 910
	{0},
};
911

912
static PyObject *
913 914 915 916 917
complex_subtype_from_string(PyTypeObject *type, PyObject *v)
{
	const char *s, *start;
	char *end;
	double x=0.0, y=0.0, z;
Mark Dickinson's avatar
Mark Dickinson committed
918
	int got_bracket=0;
919
#ifdef Py_USING_UNICODE
920
	char *s_buffer = NULL;
921
#endif
Martin v. Löwis's avatar
Martin v. Löwis committed
922
	Py_ssize_t len;
923

924 925 926
	if (PyString_Check(v)) {
		s = PyString_AS_STRING(v);
		len = PyString_GET_SIZE(v);
927
	}
928
#ifdef Py_USING_UNICODE
929
	else if (PyUnicode_Check(v)) {
930 931 932
		s_buffer = (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v)+1);
		if (s_buffer == NULL)
			return PyErr_NoMemory();
933 934 935 936
		if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
					    PyUnicode_GET_SIZE(v),
					    s_buffer,
					    NULL))
937
			goto error;
938
		s = s_buffer;
Martin v. Löwis's avatar
Martin v. Löwis committed
939
		len = strlen(s);
940
	}
941
#endif
942 943 944 945 946 947 948 949
	else if (PyObject_AsCharBuffer(v, &s, &len)) {
		PyErr_SetString(PyExc_TypeError,
				"complex() arg is not a string");
		return NULL;
	}

	/* position on first nonblank */
	start = s;
950
	while (Py_ISSPACE(*s))
951
		s++;
Mark Dickinson's avatar
Mark Dickinson committed
952
	if (*s == '(') {
953 954 955
		/* Skip over possible bracket from repr(). */
		got_bracket = 1;
		s++;
956
		while (Py_ISSPACE(*s))
957
			s++;
958 959
	}

Mark Dickinson's avatar
Mark Dickinson committed
960
	/* a valid complex string usually takes one of the three forms:
961

Mark Dickinson's avatar
Mark Dickinson committed
962 963 964
	     <float>                  - real part only
	     <float>j                 - imaginary part only
	     <float><signed-float>j   - real and imaginary parts
965

Mark Dickinson's avatar
Mark Dickinson committed
966 967 968 969 970 971 972 973 974 975
	   where <float> represents any numeric string that's accepted by the
	   float constructor (including 'nan', 'inf', 'infinity', etc.), and
	   <signed-float> is any string of the form <float> whose first
	   character is '+' or '-'.

	   For backwards compatibility, the extra forms

	     <float><sign>j
	     <sign>j
	     j
976

Mark Dickinson's avatar
Mark Dickinson committed
977 978 979 980 981
	   are also accepted, though support for these forms may be removed from
	   a future version of Python.
	*/

	/* first look for forms starting with <float> */
982 983 984 985 986 987 988
	z = PyOS_string_to_double(s, &end, NULL);
	if (z == -1.0 && PyErr_Occurred()) {
		if (PyErr_ExceptionMatches(PyExc_ValueError))
			PyErr_Clear();
		else
			goto error;
	}
Mark Dickinson's avatar
Mark Dickinson committed
989 990 991 992 993 994
	if (end != s) {
		/* all 4 forms starting with <float> land here */
		s = end;
		if (*s == '+' || *s == '-') {
			/* <float><signed-float>j | <float><sign>j */
			x = z;
995 996 997 998 999 1000 1001
			y = PyOS_string_to_double(s, &end, NULL);
			if (y == -1.0 && PyErr_Occurred()) {
				if (PyErr_ExceptionMatches(PyExc_ValueError))
					PyErr_Clear();
				else
					goto error;
			}
Mark Dickinson's avatar
Mark Dickinson committed
1002 1003 1004 1005 1006 1007 1008
			if (end != s)
				/* <float><signed-float>j */
				s = end;
			else {
				/* <float><sign>j */
				y = *s == '+' ? 1.0 : -1.0;
				s++;
1009
			}
Mark Dickinson's avatar
Mark Dickinson committed
1010 1011
			if (!(*s == 'j' || *s == 'J'))
				goto parse_error;
1012
			s++;
Mark Dickinson's avatar
Mark Dickinson committed
1013 1014 1015
		}
		else if (*s == 'j' || *s == 'J') {
			/* <float>j */
1016
			s++;
Mark Dickinson's avatar
Mark Dickinson committed
1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027
			y = z;
		}
		else
			/* <float> */
			x = z;
	}
	else {
		/* not starting with <float>; must be <sign>j or j */
		if (*s == '+' || *s == '-') {
			/* <sign>j */
			y = *s == '+' ? 1.0 : -1.0;
1028
			s++;
Mark Dickinson's avatar
Mark Dickinson committed
1029 1030 1031 1032 1033 1034 1035 1036
		}
		else
			/* j */
			y = 1.0;
		if (!(*s == 'j' || *s == 'J'))
			goto parse_error;
		s++;
	}
1037

Mark Dickinson's avatar
Mark Dickinson committed
1038
	/* trailing whitespace and closing bracket */
1039
	while (Py_ISSPACE(*s))
Mark Dickinson's avatar
Mark Dickinson committed
1040 1041 1042 1043 1044 1045 1046
		s++;
	if (got_bracket) {
		/* if there was an opening parenthesis, then the corresponding
		   closing parenthesis should be right here */
		if (*s != ')')
			goto parse_error;
		s++;
1047
		while (Py_ISSPACE(*s))
Mark Dickinson's avatar
Mark Dickinson committed
1048 1049
			s++;
	}
1050

Mark Dickinson's avatar
Mark Dickinson committed
1051 1052 1053
	/* we should now be at the end of the string */
	if (s-start != len)
		goto parse_error;
1054

1055 1056 1057 1058 1059

#ifdef Py_USING_UNICODE
	if (s_buffer)
		PyMem_FREE(s_buffer);
#endif
Mark Dickinson's avatar
Mark Dickinson committed
1060
	return complex_subtype_from_doubles(type, x, y);
1061

Mark Dickinson's avatar
Mark Dickinson committed
1062 1063 1064
  parse_error:
	PyErr_SetString(PyExc_ValueError,
			"complex() arg is a malformed string");
1065 1066 1067 1068 1069
  error:
#ifdef Py_USING_UNICODE
	if (s_buffer)
		PyMem_FREE(s_buffer);
#endif
Mark Dickinson's avatar
Mark Dickinson committed
1070
	return NULL;
1071 1072 1073 1074 1075
}

static PyObject *
complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
1076
	PyObject *r, *i, *tmp, *f;
1077 1078 1079
	PyNumberMethods *nbr, *nbi = NULL;
	Py_complex cr, ci;
	int own_r = 0;
1080 1081
	int cr_is_complex = 0;
	int ci_is_complex = 0;
1082
	static PyObject *complexstr;
1083
	static char *kwlist[] = {"real", "imag", 0};
1084 1085 1086 1087 1088 1089

	r = Py_False;
	i = NULL;
	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:complex", kwlist,
					 &r, &i))
		return NULL;
1090

1091
	/* Special-case for a single argument when type(arg) is complex. */
1092 1093
	if (PyComplex_CheckExact(r) && i == NULL &&
	    type == &PyComplex_Type) {
1094 1095
		/* Note that we can't know whether it's safe to return
		   a complex *subclass* instance as-is, hence the restriction
1096 1097 1098
		   to exact complexes here.  If either the input or the
		   output is a complex subclass, it will be handled below 
		   as a non-orthogonal vector.  */
1099 1100 1101
		Py_INCREF(r);
		return r;
	}
1102
	if (PyString_Check(r) || PyUnicode_Check(r)) {
1103 1104 1105 1106 1107
		if (i != NULL) {
			PyErr_SetString(PyExc_TypeError,
					"complex() can't take second arg"
					" if first is a string");
			return NULL;
Georg Brandl's avatar
Georg Brandl committed
1108
		}
1109
		return complex_subtype_from_string(type, r);
1110
	}
1111
	if (i != NULL && (PyString_Check(i) || PyUnicode_Check(i))) {
1112 1113 1114 1115
		PyErr_SetString(PyExc_TypeError,
				"complex() second arg can't be a string");
		return NULL;
	}
1116

1117
	if (complexstr == NULL) {
1118
		complexstr = PyString_InternFromString("__complex__");
1119 1120 1121
		if (complexstr == NULL)
			return NULL;
	}
1122 1123 1124 1125 1126 1127 1128 1129 1130
	if (PyInstance_Check(r)) {
		f = PyObject_GetAttr(r, complexstr);
		if (f == NULL) {
			if (PyErr_ExceptionMatches(PyExc_AttributeError))
				PyErr_Clear();
			else
				return NULL;
		}
	}
1131
	else {
1132 1133
		f = _PyObject_LookupSpecial(r, "__complex__", &complexstr);
		if (f == NULL && PyErr_Occurred())
1134
			return NULL;
1135 1136 1137
	}
	if (f != NULL) {
		r = PyObject_CallFunctionObjArgs(f, NULL);
1138 1139 1140 1141 1142
		Py_DECREF(f);
		if (r == NULL)
			return NULL;
		own_r = 1;
	}
1143 1144 1145 1146 1147
	nbr = r->ob_type->tp_as_number;
	if (i != NULL)
		nbi = i->ob_type->tp_as_number;
	if (nbr == NULL || nbr->nb_float == NULL ||
	    ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
1148
		PyErr_SetString(PyExc_TypeError,
1149
			   "complex() argument must be a string or a number");
1150 1151 1152
		if (own_r) {
			Py_DECREF(r);
		}
1153 1154
		return NULL;
	}
1155 1156 1157 1158 1159 1160 1161 1162

	/* If we get this far, then the "real" and "imag" parts should
	   both be treated as numbers, and the constructor should return a
	   complex number equal to (real + imag*1j).

 	   Note that we do NOT assume the input to already be in canonical
	   form; the "real" and "imag" parts might themselves be complex
	   numbers, which slightly complicates the code below. */
1163
	if (PyComplex_Check(r)) {
1164 1165 1166
		/* Note that if r is of a complex subtype, we're only
		   retaining its real & imag parts here, and the return
		   value is (properly) of the builtin complex type. */
1167
		cr = ((PyComplexObject*)r)->cval;
1168
		cr_is_complex = 1;
1169 1170 1171 1172 1173
		if (own_r) {
			Py_DECREF(r);
		}
	}
	else {
1174 1175 1176
		/* The "real" part really is entirely real, and contributes
		   nothing in the imaginary direction.  
		   Just treat it as a double. */
1177 1178
		tmp = PyNumber_Float(r);
		if (own_r) {
1179 1180
			/* r was a newly created complex number, rather
			   than the original "real" argument. */
1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191
			Py_DECREF(r);
		}
		if (tmp == NULL)
			return NULL;
		if (!PyFloat_Check(tmp)) {
			PyErr_SetString(PyExc_TypeError,
					"float(r) didn't return a float");
			Py_DECREF(tmp);
			return NULL;
		}
		cr.real = PyFloat_AsDouble(tmp);
Georg Brandl's avatar
Georg Brandl committed
1192
		cr.imag = 0.0; /* Shut up compiler warning */
1193 1194 1195 1196 1197
		Py_DECREF(tmp);
	}
	if (i == NULL) {
		ci.real = 0.0;
	}
1198
	else if (PyComplex_Check(i)) {
1199
		ci = ((PyComplexObject*)i)->cval;
1200 1201
		ci_is_complex = 1;
	} else {
1202 1203 1204
		/* The "imag" part really is entirely imaginary, and
		   contributes nothing in the real direction.
		   Just treat it as a double. */
1205 1206 1207 1208 1209 1210
		tmp = (*nbi->nb_float)(i);
		if (tmp == NULL)
			return NULL;
		ci.real = PyFloat_AsDouble(tmp);
		Py_DECREF(tmp);
	}
1211
	/*  If the input was in canonical form, then the "real" and "imag"
1212
	    parts are real numbers, so that ci.imag and cr.imag are zero.
1213
	    We need this correction in case they were not real numbers. */
1214 1215 1216 1217 1218 1219 1220 1221

	if (ci_is_complex) {
		cr.real -= ci.imag;
	}
	if (cr_is_complex) {
		ci.real += cr.imag;
	}
	return complex_subtype_from_doubles(type, cr.real, ci.real);
1222 1223
}

1224
PyDoc_STRVAR(complex_doc,
1225 1226 1227
"complex(real[, imag]) -> complex number\n"
"\n"
"Create a complex number from a real part and an optional imaginary part.\n"
1228
"This is equivalent to (real + imag*1j) where imag defaults to 0.");
1229

1230
static PyNumberMethods complex_as_number = {
1231 1232 1233
	(binaryfunc)complex_add, 		/* nb_add */
	(binaryfunc)complex_sub, 		/* nb_subtract */
	(binaryfunc)complex_mul, 		/* nb_multiply */
1234
	(binaryfunc)complex_classic_div,	/* nb_divide */
1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247
	(binaryfunc)complex_remainder,		/* nb_remainder */
	(binaryfunc)complex_divmod,		/* nb_divmod */
	(ternaryfunc)complex_pow,		/* nb_power */
	(unaryfunc)complex_neg,			/* nb_negative */
	(unaryfunc)complex_pos,			/* nb_positive */
	(unaryfunc)complex_abs,			/* nb_absolute */
	(inquiry)complex_nonzero,		/* nb_nonzero */
	0,					/* nb_invert */
	0,					/* nb_lshift */
	0,					/* nb_rshift */
	0,					/* nb_and */
	0,					/* nb_xor */
	0,					/* nb_or */
1248 1249 1250 1251
	complex_coerce,				/* nb_coerce */
	complex_int,				/* nb_int */
	complex_long,				/* nb_long */
	complex_float,				/* nb_float */
1252 1253
	0,					/* nb_oct */
	0,					/* nb_hex */
1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268
	0,					/* nb_inplace_add */
	0,					/* nb_inplace_subtract */
	0,					/* nb_inplace_multiply*/
	0,					/* nb_inplace_divide */
	0,					/* nb_inplace_remainder */
	0, 					/* nb_inplace_power */
	0,					/* nb_inplace_lshift */
	0,					/* nb_inplace_rshift */
	0,					/* nb_inplace_and */
	0,					/* nb_inplace_xor */
	0,					/* nb_inplace_or */
	(binaryfunc)complex_int_div,		/* nb_floor_divide */
	(binaryfunc)complex_div,		/* nb_true_divide */
	0,					/* nb_inplace_floor_divide */
	0,					/* nb_inplace_true_divide */
1269 1270
};

1271
PyTypeObject PyComplex_Type = {
1272
	PyVarObject_HEAD_INIT(&PyType_Type, 0)
1273
	"complex",
1274
	sizeof(PyComplexObject),
1275
	0,
1276
	complex_dealloc,			/* tp_dealloc */
1277
	(printfunc)complex_print,		/* tp_print */
1278
	0,					/* tp_getattr */
1279 1280 1281 1282 1283 1284 1285 1286
	0,					/* tp_setattr */
	0,					/* tp_compare */
	(reprfunc)complex_repr,			/* tp_repr */
	&complex_as_number,    			/* tp_as_number */
	0,					/* tp_as_sequence */
	0,					/* tp_as_mapping */
	(hashfunc)complex_hash, 		/* tp_hash */
	0,					/* tp_call */
1287
	(reprfunc)complex_str,			/* tp_str */
1288
	PyObject_GenericGetAttr,		/* tp_getattro */
1289 1290
	0,					/* tp_setattro */
	0,					/* tp_as_buffer */
1291 1292
	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
	complex_doc,				/* tp_doc */
1293 1294 1295
	0,					/* tp_traverse */
	0,					/* tp_clear */
	complex_richcompare,			/* tp_richcompare */
1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307
	0,					/* tp_weaklistoffset */
	0,					/* tp_iter */
	0,					/* tp_iternext */
	complex_methods,			/* tp_methods */
	complex_members,			/* tp_members */
	0,					/* tp_getset */
	0,					/* tp_base */
	0,					/* tp_dict */
	0,					/* tp_descr_get */
	0,					/* tp_descr_set */
	0,					/* tp_dictoffset */
	0,					/* tp_init */
1308
	PyType_GenericAlloc,			/* tp_alloc */
1309
	complex_new,				/* tp_new */
1310
	PyObject_Del,           		/* tp_free */
1311 1312 1313
};

#endif