tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/doc
/source
/reference
/c-api.deprecations.rst
C API Deprecations | |
================== | |
Background | |
---------- | |
The API exposed by NumPy for third-party extensions has grown over | |
years of releases, and has allowed programmers to directly access | |
NumPy functionality from C. This API can be best described as | |
"organic". It has emerged from multiple competing desires and from | |
multiple points of view over the years, strongly influenced by the | |
desire to make it easy for users to move to NumPy from Numeric and | |
Numarray. The core API originated with Numeric in 1995 and there are | |
patterns such as the heavy use of macros written to mimic Python's | |
C-API as well as account for compiler technology of the late 90's. | |
There is also only a small group of volunteers who have had very little | |
time to spend on improving this API. | |
There is an ongoing effort to improve the API. | |
It is important in this effort | |
to ensure that code that compiles for NumPy 1.X continues to | |
compile for NumPy 1.X. At the same time, certain API's will be marked | |
as deprecated so that future-looking code can avoid these API's and | |
follow better practices. | |
Another important role played by deprecation markings in the C API is to move | |
towards hiding internal details of the NumPy implementation. For those | |
needing direct, easy, access to the data of ndarrays, this will not | |
remove this ability. Rather, there are many potential performance | |
optimizations which require changing the implementation details, and | |
NumPy developers have been unable to try them because of the high | |
value of preserving ABI compatibility. By deprecating this direct | |
access, we will in the future be able to improve NumPy's performance | |
in ways we cannot presently. | |
Deprecation Mechanism NPY_NO_DEPRECATED_API | |
------------------------------------------- | |
In C, there is no equivalent to the deprecation warnings that Python | |
supports. One way to do deprecations is to flag them in the | |
documentation and release notes, then remove or change the deprecated | |
features in a future major version (NumPy 2.0 and beyond). Minor | |
versions of NumPy should not have major C-API changes, however, that | |
prevent code that worked on a previous minor release. For example, we | |
will do our best to ensure that code that compiled and worked on NumPy | |
1.4 should continue to work on NumPy 1.7 (but perhaps with compiler | |
warnings). | |
To use the NPY_NO_DEPRECATED_API mechanism, you need to #define it to | |
the target API version of NumPy before #including any NumPy headers. | |
If you want to confirm that your code is clean against 1.7, use:: | |
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION | |
On compilers which support a #warning mechanism, NumPy issues a | |
compiler warning if you do not define the symbol NPY_NO_DEPRECATED_API. | |
This way, the fact that there are deprecations will be flagged for | |
third-party developers who may not have read the release notes closely. | |