Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

_Py_c_sum, _Py_c_diff, etc - were removed from Python.h #112019

Closed
skirpichev opened this issue Nov 13, 2023 · 9 comments
Closed

_Py_c_sum, _Py_c_diff, etc - were removed from Python.h #112019

skirpichev opened this issue Nov 13, 2023 · 9 comments
Labels
topic-C-API type-bug An unexpected behavior, bug, or error

Comments

@skirpichev
Copy link
Member

skirpichev commented Nov 13, 2023

See #106339 and #106320. But these functions are documented as public: https://docs.python.org/3/c-api/complex.html#complex-numbers-as-c-structures

I think c38c666 should be partially reverted and _Py_c_abs - documented.

On another hand, quick github search shows very little examples of using above functions. See also #106320 (comment). So, in a long term I propose to deprecate this API and related functions (PyComplex_FromCComplex/PyComplex_AsCComplex). Who knows, maybe someday we could use <complex.h>...

Linked PRs

@skirpichev skirpichev added the type-bug An unexpected behavior, bug, or error label Nov 13, 2023
@skirpichev
Copy link
Member Author

CC @vstinner

@vstinner
Copy link
Member

If these functions are useful, I would prefer to make them public.

Previous discussion about this private API: #106320 (comment)

vstinner added a commit to vstinner/cpython that referenced this issue Nov 15, 2023
Add functions operating on Py_complex numbers:

* Py_complex_sum()
* Py_complex_diff()
* Py_complex_neg()
* Py_complex_prod()
* Py_complex_quot()
* Py_complex_pow()
* Py_complex_abs()
vstinner added a commit to vstinner/cpython that referenced this issue Nov 15, 2023
Add functions operating on Py_complex numbers:

* Py_complex_sum()
* Py_complex_diff()
* Py_complex_neg()
* Py_complex_prod()
* Py_complex_quot()
* Py_complex_pow()
* Py_complex_abs()
vstinner added a commit to vstinner/cpython that referenced this issue Nov 15, 2023
Add functions operating on Py_complex numbers:

* Py_complex_sum()
* Py_complex_diff()
* Py_complex_neg()
* Py_complex_prod()
* Py_complex_quot()
* Py_complex_pow()
* Py_complex_abs()
vstinner added a commit to vstinner/cpython that referenced this issue Nov 15, 2023
Add functions operating on Py_complex numbers:

* Py_complex_sum()
* Py_complex_diff()
* Py_complex_neg()
* Py_complex_prod()
* Py_complex_quot()
* Py_complex_pow()
* Py_complex_abs()

Add basic tests on these functions in test_capi.
@vstinner
Copy link
Member

@skirpichev: Do you use these functions? Do you know a project using these functions? A code search on PyPI top 5,000 projects only found 1 line using _Py_c_pow() in the numba project.

@skirpichev
Copy link
Member Author

@mdickinson, should we expose these functions and details of the Py_complex struct, what do you think?

If these functions are useful, I would prefer to make them public.

Code search shows they aren't used too much.

@skirpichev: Do you use these functions?

Not outside of CPython itself.

PS: (I'm moving discussion from #106320)

The C99 complex API is documented at: https://en.cppreference.com/w/c/numeric/complex

It seems, see e.g. (https://discuss.python.org/t/33433/23, llvm/llvm-project#8904), that none of popular compilers (icc maybe an exception) support this extension correctly.

@vstinner
Copy link
Member

@mdickinson, should we expose these functions and details of the Py_complex struct, what do you think?

Members of the Py_complex structure are public since the structure was added to Python 1.4 by commit f9fca92 in 1996. The structure was called complex and then was renamed to Py_complex.

The Py_complex functions are already documented but have a _Py prefix.

@skirpichev
Copy link
Member Author

Also they take struct by value, a bit strange API.

@vstinner
Copy link
Member

I restored removed _Py_c complex functions in #112115. The initial issue is fixed, so I close the issue.

Later, we should consider deprecating these functions and make them fully internal. I restored these functions because they are documented.

@skirpichev
Copy link
Member Author

Later, we should consider deprecating these functions and make them fully internal.

Maybe we could keep this issue for that?

@vstinner
Copy link
Member

Maybe we could keep this issue for that?

I prefer to wait until a migration path is decision on how to get rid of private functions (which were reverted in Python 3.13. alpha2): capi-workgroup/api-evolution#24

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-C-API type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

3 participants