mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Kill div, mod and divmod on complex (already deprecated in 2.x).
Add docstring for conjugate(). Patch by Jeffrey Yasskin.
This commit is contained in:
parent
b31339fa02
commit
46334cdae8
1 changed files with 15 additions and 55 deletions
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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 */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue