Consider adding public PyLong_FlipSign() function #120446
Description
Activity
- addedtype-featureA feature request or enhancementA feature request or enhancement
on Jun 13, 2024 I planned to propose adding
PyLong_NegativeInPlace()andPyLong_AbsoluteInPlace().Hmm, it seems that my first variant can't be implemented with same signature as the second. Rather it should be (like
_PyLong_Negate()):int PyLong_FlipSign(PyObject **obj);
- added a commit that references this issue
on Jun 14, 2024 adding PyLong_NegativeInPlace() and PyLong_AbsoluteInPlace().
I think this naming better fits case, when there will be also other
PyNumber_*-like functions. But I'm not sure that we have practical need for that.FYI, PR: #120489 (as a draft; IIUC, this should be discussed in C-API WG)
PR closed in favor of #121339.
Now I don't have a strong motivation for this function. Kept open as @serhiy-storchaka planned a similar proposal.
Python int objects are immutable. I dislike APIs which seem to treat them as mutable objects.
What's the status of this issue? PEP 757 has been implementation in Python 3.14. Can we close this issue?
Proposal should go to the C API WG (ideally after public discussion)
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:
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
objand 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
Linked PRs