Index: cmathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cmathmodule.c,v retrieving revision 2.32 diff -c -r2.32 cmathmodule.c *** cmathmodule.c 2 Aug 2002 02:27:13 -0000 2.32 --- cmathmodule.c 18 Oct 2003 18:25:00 -0000 *************** *** 20,25 **** --- 20,26 ---- static Py_complex c_log(Py_complex); static Py_complex c_prodi(Py_complex); static Py_complex c_sqrt(Py_complex); + static PyObject * math_error(void); static Py_complex *************** *** 164,174 **** return r; } - PyDoc_STRVAR(c_log_doc, - "log(x)\n" - "\n" - "Return the natural logarithm of x."); - static Py_complex c_log10(Py_complex x) --- 165,170 ---- *************** *** 313,318 **** --- 309,343 ---- "Return the hyperbolic tangent of x."); + static PyObject * + cmath_log(PyObject *self, PyObject *args) + { + PyObject *arg; + PyObject *base = NULL; + Py_complex x; + if (!PyArg_UnpackTuple(args, "log", 1, 2, &arg, &base)) { + return NULL; + } + errno = 0; + PyFPE_START_PROTECT("complex function", return 0) + x = c_log(PyComplex_AsCComplex(arg)); + if (base) { + Py_complex y = c_log(PyComplex_AsCComplex(base)); + x = c_quot(x, y); + } + PyFPE_END_PROTECT(x) + if (errno != 0) { + return math_error(); + } + Py_ADJUST_ERANGE2(x.real, x.imag); + return PyComplex_FromCComplex(x); + } + + PyDoc_STRVAR(cmath_log_doc, + "log(x[, base]) -> the logarithm of x to the given base.\n\ + If the base not specified, returns the natural logarithm (base e) of x."); + + /* And now the glue to make them available from Python: */ static PyObject * *************** *** 358,364 **** FUNC1(cmath_cos, c_cos) FUNC1(cmath_cosh, c_cosh) FUNC1(cmath_exp, c_exp) - FUNC1(cmath_log, c_log) FUNC1(cmath_log10, c_log10) FUNC1(cmath_sin, c_sin) FUNC1(cmath_sinh, c_sinh) --- 383,388 ---- *************** *** 381,387 **** {"cos", cmath_cos, METH_VARARGS, c_cos_doc}, {"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc}, {"exp", cmath_exp, METH_VARARGS, c_exp_doc}, ! {"log", cmath_log, METH_VARARGS, c_log_doc}, {"log10", cmath_log10, METH_VARARGS, c_log10_doc}, {"sin", cmath_sin, METH_VARARGS, c_sin_doc}, {"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc}, --- 405,411 ---- {"cos", cmath_cos, METH_VARARGS, c_cos_doc}, {"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc}, {"exp", cmath_exp, METH_VARARGS, c_exp_doc}, ! {"log", cmath_log, METH_VARARGS, cmath_log_doc}, {"log10", cmath_log10, METH_VARARGS, c_log10_doc}, {"sin", cmath_sin, METH_VARARGS, c_sin_doc}, {"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc},