MAINT: __package__ → __spec__.parent#415
Conversation
Remove deprecated __package__, scheduled for removal in Python 3.15: https://docs.python.org/3.15/reference/datamodel.html#module.__package__
There was a problem hiding this comment.
Pull request overview
Updates internal dynamic imports to avoid using the deprecated __package__ attribute, aligning with Python’s planned removal of module.__package__ in 3.15.
Changes:
- Replace
__package__ + ".linalg"/__package__ + ".fft"with__spec__.parent + ...in affected namespace packages. - Apply the same update consistently across NumPy, Torch, Dask Array, and CuPy shims.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
array_api_compat/numpy/__init__.py |
Switch dynamic absolute imports for linalg/fft to use __spec__.parent. |
array_api_compat/torch/__init__.py |
Same replacement for Torch namespace wrapper imports. |
array_api_compat/dask/array/__init__.py |
Same replacement for Dask Array namespace wrapper imports. |
array_api_compat/cupy/__init__.py |
Same replacement for CuPy namespace wrapper imports. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ev-br
left a comment
There was a problem hiding this comment.
According to the docs, __spec__.parent does exist in python 3.10, which is our minimum supported version, https://docs.python.org/3.10/library/importlib.html#importlib.machinery.ModuleSpec.parent
The wording in the 3.15 doc links does indicate that __spec__.parent is recommended and that __package__ might even disappear at some point.
There seems to be (or was) some difference between __spec__.parent and __package__ in one being writeable and the other read-only, but we're not attempting to mutate it anyway. Thus we can make the change sooner than later. Thank you @DimitriPapadopoulos
Remove deprecated
__package__, scheduled for removal in Python 3.15.