C API could be more consistent with returning NPY_SUCCEED/NPY_FAIL
![](https://secure.gravatar.com/avatar/fab3963a498a777bde2350fc712378e1.jpg?s=120&d=mm&r=g)
While using the C API to work with Numpy arrays, I came across some inconsistencies regarding the return of a success state from various Numpy functions. For example, the array iterator functions return either NPY_SUCCEED (defined as 1) or NPY_FAIL (defined as 0) to indicate whether the function successfully finished. However, various of the array functions return -1 on success and 0 on failure. The result is similar enough, but I would think it more consistent to use NPY_SUCCEED/NPY_FAIL everywhere. As an example, consider the documentation pages for the Array API: https://numpy.org/doc/stable/reference/c-api/array.html and the Array iterator API: https://numpy.org/doc/stable/reference/c-api/iterator.html#array-iterator-ap... I hope this is the right place to place this. It is the first time I really publicly engage with this kind of thing. This did not seem like a bug and the Github page indicated that feature requests should go to the mailing list first.
![](https://secure.gravatar.com/avatar/b4f6d4f8b501cb05fd054944a166a121.jpg?s=120&d=mm&r=g)
The Python C-API almost exclusively uses `-1` for errors and I consider it a wart that some NumPy API uses `NPY_FAIL`/`NPY_SUCCEED`, i would not do this for new API. The one exception are all "argument parsing functions". For those Python again dictates the use of 0 (NPY_FAIL) and 1 (NPY_SUCCEED). And while a big exception, yes there is API that should have used the 0 for success and -1 for error convention, but did not... There is no issue anywhere, mainly because I don't think anyone really considered changing API, since it would require simply duplicating functions which is also confusing. I.e. sure, it's bad, but what is the actionable item? - Sebastian On Thu, 2024-10-31 at 11:53 +0000, sverre.hassing--- via NumPy- Discussion wrote:
![](https://secure.gravatar.com/avatar/b4f6d4f8b501cb05fd054944a166a121.jpg?s=120&d=mm&r=g)
The Python C-API almost exclusively uses `-1` for errors and I consider it a wart that some NumPy API uses `NPY_FAIL`/`NPY_SUCCEED`, i would not do this for new API. The one exception are all "argument parsing functions". For those Python again dictates the use of 0 (NPY_FAIL) and 1 (NPY_SUCCEED). And while a big exception, yes there is API that should have used the 0 for success and -1 for error convention, but did not... There is no issue anywhere, mainly because I don't think anyone really considered changing API, since it would require simply duplicating functions which is also confusing. I.e. sure, it's bad, but what is the actionable item? - Sebastian On Thu, 2024-10-31 at 11:53 +0000, sverre.hassing--- via NumPy- Discussion wrote:
participants (2)
-
Sebastian Berg
-
sverre.hassing@gmail.com