Description
Feature or enhancement
Proposal:
Currently there is only a slow way (i.e. PyNumber_Negative()
) to invert the sign of a big integer. Direct manipulation of the sign value is available only via private function, e.g. _PyLong_SetSignAndDigitCount()
:
https://github.com/aleaxit/gmpy/blob/1c0d4f38d4f1093df0e9460d82e4331d3d3946b6/src/gmpy2_convert_gmp.c#L153
I propose this interface:
int PyLong_FlipSign(PyObject *obj);
For small integers it will fallback to PyLong_FromLong()
(like _PyLong_Negate()
does), for the rest - just _PyLong_FlipSign()
to change sign in place.
Alternatively, we could just expose a direct wrapper of _PyLong_FlipSign()
and warn users to not use this function for small ints (that doesn't make sense for me anyway).
In both variants, on success - flip the sign of obj
and return 0. On failure - return -1 with exception set. Shouldn't fail on PyLongObject or it's subtype.
I'll work on a patch if this proposal does make sense.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response