pymc-devs / pymc-devs/pytensor
Use numpy C-API for C implementations of Sort/Argsort
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 644
- Forks
- 208
- Avg merge
- 2d 14h
- Merged PRs (30d)
- 16
Description
Description
These are available (for argsort maybe for a single axis) in the numpy public C-API:
https://numpy.org/devdocs/reference/c-api/array.html#c.PyArray_Sort
https://numpy.org/devdocs/reference/c-api/array.html#c.PyArray_ArgSort
Using it for our own ops should be simpler than the already simple SearchSorted implementation:
https://github.com/pymc-devs/pytensor/blob/afb7695110dec32e13247aadafd245639d96f7c4/pytensor/tensor/signal/conv.py#L68-L71
Sort may act inplace, so we can add an inplace version of the Sort op as well (and be sure to copy when not enabled)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the NumPy PyArray_Sort and PyArray_ArgSort documentation, then inspect the SearchSorted implementation referenced in pytensor/tensor/signal/conv.py at lines 68-71. Done means the Sort and Argsort operations use the public NumPy C API, with an inplace Sort variant and copying when inplace behavior is disabled.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, numpy, python
- Domain
- backend, performance
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100