Commit 8914904f authored by Guido van Rossum's avatar Guido van Rossum

Kill div, mod and divmod on complex (already deprecated in 2.x).

Add docstring for conjugate().
Patch by Jeffrey Yasskin.
parent 8ee845eb
...@@ -466,57 +466,18 @@ complex_div(PyObject *v, PyObject *w) ...@@ -466,57 +466,18 @@ complex_div(PyObject *v, PyObject *w)
static PyObject * static PyObject *
complex_remainder(PyObject *v, PyObject *w) complex_remainder(PyObject *v, PyObject *w)
{ {
Py_complex div, mod; PyErr_SetString(PyExc_TypeError,
Py_complex a, b; "can't mod complex numbers.");
TO_COMPLEX(v, a); return NULL;
TO_COMPLEX(w, b);
if (PyErr_Warn(PyExc_DeprecationWarning,
"complex divmod(), // and % are deprecated") < 0)
return NULL;
errno = 0;
div = c_quot(a, b); /* The raw divisor value. */
if (errno == EDOM) {
PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder");
return NULL;
}
div.real = floor(div.real); /* Use the floor of the real part. */
div.imag = 0.0;
mod = c_diff(a, c_prod(b, div));
return PyComplex_FromCComplex(mod);
} }
static PyObject * static PyObject *
complex_divmod(PyObject *v, PyObject *w) complex_divmod(PyObject *v, PyObject *w)
{ {
Py_complex div, mod; PyErr_SetString(PyExc_TypeError,
PyObject *d, *m, *z; "can't take floor or mod of complex number.");
Py_complex a, b; return NULL;
TO_COMPLEX(v, a);
TO_COMPLEX(w, b);
if (PyErr_Warn(PyExc_DeprecationWarning,
"complex divmod(), // and % are deprecated") < 0)
return NULL;
errno = 0;
div = c_quot(a, b); /* The raw divisor value. */
if (errno == EDOM) {
PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()");
return NULL;
}
div.real = floor(div.real); /* Use the floor of the real part. */
div.imag = 0.0;
mod = c_diff(a, c_prod(b, div));
d = PyComplex_FromCComplex(div);
m = PyComplex_FromCComplex(mod);
z = PyTuple_Pack(2, d, m);
Py_XDECREF(d);
Py_XDECREF(m);
return z;
} }
static PyObject * static PyObject *
...@@ -560,15 +521,8 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z) ...@@ -560,15 +521,8 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z)
static PyObject * static PyObject *
complex_int_div(PyObject *v, PyObject *w) complex_int_div(PyObject *v, PyObject *w)
{ {
PyObject *t, *r; PyErr_SetString(PyExc_TypeError,
"can't take floor of complex number.");
t = complex_divmod(v, w);
if (t != NULL) {
r = PyTuple_GET_ITEM(t, 0);
Py_INCREF(r);
Py_DECREF(t);
return r;
}
return NULL; return NULL;
} }
...@@ -665,6 +619,11 @@ complex_conjugate(PyObject *self) ...@@ -665,6 +619,11 @@ complex_conjugate(PyObject *self)
return PyComplex_FromCComplex(c); return PyComplex_FromCComplex(c);
} }
PyDoc_STRVAR(complex_conjugate_doc,
"complex.conjugate() -> complex\n"
"\n"
"Returns the complex conjugate of its argument. (3-4j).conjugate() == 3+4j.");
static PyObject * static PyObject *
complex_getnewargs(PyComplexObject *v) complex_getnewargs(PyComplexObject *v)
{ {
...@@ -672,7 +631,8 @@ complex_getnewargs(PyComplexObject *v) ...@@ -672,7 +631,8 @@ complex_getnewargs(PyComplexObject *v)
} }
static PyMethodDef complex_methods[] = { static PyMethodDef complex_methods[] = {
{"conjugate", (PyCFunction)complex_conjugate, METH_NOARGS}, {"conjugate", (PyCFunction)complex_conjugate, METH_NOARGS,
complex_conjugate_doc},
{"__getnewargs__", (PyCFunction)complex_getnewargs, METH_NOARGS}, {"__getnewargs__", (PyCFunction)complex_getnewargs, METH_NOARGS},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment