Enh: Accept "duck arrays" for `tensordot`
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 668
- Forks
- 141
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 4
Description
Please describe the purpose of the new feature or describe the problem to solve.
Sparse's tensordot only allows multiplication between sparse arrays and either scipy sparse arrays or numpy ndarrays.
It would be useful if other array-like objects were allowed.
For instance, in xarray, the dot function can only multiply a sparse DataArray and a dask DataArray if the einsum/tensordot function from dask is used: https://github.com/pydata/xarray/issues/9934
Suggest a solution if possible.
The code for multiplying a COO matrix and a np.ndarray in _dot seems like it mostly relies on being able to infer the dtype, index, and create empty ndarrays, so it seems plausible that other array-like objects could be used here.
I haven't tried to implement this though.
If you have tried alternatives, please describe them below.
No response
Additional information that may help us understand your needs.
Please see this issue for further discussion in the context of xarray: https://github.com/pydata/xarray/issues/9934
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 at the COO multiplication path in _dot and trace how tensordot infers dtype and creates index and empty-array values. Review the existing tensordot behavior for scipy sparse arrays and NumPy ndarrays, then define coverage for other array-like operands such as dask arrays. Done means supported duck arrays can participate in tensordot without breaking existing cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100