Repository navigation
Deprecate Py_IS_NAN/INFINITY/FINITE? #119613
Description
Activity
- addedtype-featureA feature request or enhancementA feature request or enhancement
on May 27, 2024 First part: #119619
isnan(), isinf() and isfinite() are part of C99, which is a requirement for 3.11+. Probably, it does make sense to deprecate (undocumented) public macros and switch codebase to use C stdlib functions.
A code search on PyPI top 7,500 projects found 10 projects using these macros:
- Nuitka (2.1.2)
- aim (3.19.1)
- fastcluster (1.2.6)
- gmpy2 (2.1.5)
- msgspec (0.18.6)
- numba (0.59.0)
- pandas (2.2.1)
- python-rapidjson (1.16)
- simplejson (3.19.2)
- vowpalwabbit (9.9.0)
I suggest to update all of these projects before considering to deprecate these macros.
I would be fine with a soft deprecation. It's the kind of the issue which fall into PEP 743 – Add Py_COMPAT_API_VERSION to the Python C API territory: having a way to opt-out from deprecated macros, without forcing all projects to update their code.
@vstinner, these macroses were undocumented. Should we (1) document them (with "deprecated" statement) and (2) add news entry? Or (2) is enough?
I would be fine with a soft deprecation.
If we don't announce removal (e.g. deprecated-removed statement) wouldn't this be a soft deprecation?
- Nuitka (2.1.2)
- aim (3.19.1)
- fastcluster (1.2.6)
- gmpy2 (2.1.5) // Use C99+ math.h functions instead of Py_IS_NAN/INFINITY/FINITE gmpy2/gmpy2#485
- msgspec (0.18.6)
- numba (0.59.0)
- pandas (2.2.1) // CLN: use isnan() instead of the Py_IS_NAN macro pandas-dev/pandas#58850
- python-rapidjson (1.16)
- simplejson (3.19.2)
- vowpalwabbit (9.9.0)
You can announce the soft deprecation in What's New in Python 3.14 and add a comment to explain that these macros are soft deprecated.
Maybe this could go to 3.13?
Maybe this could go to 3.13?
Deprecations cannot be added after beta1.
Reacted by Alex Waygood, Eric V. Smith, Erlend E. Aasland and Sergey B KirpichevOk, last part: #119701
Feature or enhancement
Proposal:
isnan(), isinf() and isfinite() are part of C99, which is a requirement for 3.11+. Probably, it does make sense to deprecate (undocumented) public macros and switch codebase to use C stdlib functions.
JFR: #119457 (comment)
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