Commit 46334cda 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 b31339fa
...@@ -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);
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; 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;
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; 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