static PyObject * GMPy_Complex_Polar(PyObject *x, CTXT_Object *context) { PyObject *tempx, *abs, *phase, *result; CHECK_CONTEXT(context); if (!(tempx = (PyObject*)GMPy_MPC_From_Complex(x, 1, 1, context))) { return NULL; } abs = GMPy_Complex_Abs(tempx, context); phase = GMPy_Complex_Phase(tempx, context); Py_DECREF(tempx); result = PyTuple_New(2); if (!abs || !phase || !result) { Py_XDECREF(abs); Py_XDECREF(phase); Py_XDECREF(result); return NULL; } PyTuple_SET_ITEM(result, 0, abs); PyTuple_SET_ITEM(result, 1, phase); return result; }
static PyObject * GMPy_Number_Abs(PyObject *x, CTXT_Object *context) { if (IS_INTEGER(x)) return GMPy_Integer_Abs(x, context); if (IS_RATIONAL_ONLY(x)) return GMPy_Rational_Abs(x, context); if (IS_REAL_ONLY(x)) return GMPy_Real_Abs(x, context); if (IS_COMPLEX_ONLY(x)) return GMPy_Complex_Abs(x, context); TYPE_ERROR("abs() argument type not supported"); return NULL; }
static PyObject * GMPy_MPC_Abs_Slot(MPC_Object *x) { return GMPy_Complex_Abs((PyObject*)x, NULL); }