sparse: SystemError for COO.dot with NumPy 1.20

Describe the bug

a.dot(a) raises a SystemError (and TypeError) with the latest version of sparse and NumPy 1.20.

To Reproduce

In [1]: import sparse

In [2]: a = sparse.zeros((4, 4))

In [4]: a.dot(a)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: expected dtype object, got 'numpy.dtype[float64]'

The above exception was the direct cause of the following exception:

SystemError                               Traceback (most recent call last)
<ipython-input-4-569a015a6581> in <module>
----> 1 a.dot(a)

~/Envs/dask-dev/lib/python3.7/site-packages/sparse/_coo/core.py in dot(self, other)
   1675                [ 6, 11]], dtype=int64)
   1676         """
-> 1677         return dot(self, other)
   1678
   1679     def __matmul__(self, other):

~/Envs/dask-dev/lib/python3.7/site-packages/sparse/_coo/common.py in dot(a, b)
    291     if b.ndim == 1:
    292         b_axis = -1
--> 293     return tensordot(a, b, axes=(a_axis, b_axis))
    294
    295

~/Envs/dask-dev/lib/python3.7/site-packages/sparse/_coo/common.py in tensordot(a, b, axes, return_type)
    172     at = a.transpose(newaxes_a).reshape(newshape_a)
    173     bt = b.transpose(newaxes_b).reshape(newshape_b)
--> 174     res = _dot(at, bt, return_type)
    175     return res.reshape(olda + oldb)
    176

~/Envs/dask-dev/lib/python3.7/site-packages/sparse/_coo/common.py in _dot(a, b, return_type)
    301         b = b.T
    302         coords, data = _dot_coo_coo_type(a.dtype, b.dtype)(
--> 303             a.coords, a.data, b.coords, b.data
    304         )
    305

SystemError: CPUDispatcher(<function _dot_coo_coo_type.<locals>._dot_coo_coo at 0x11a0ec8c0>) returned a result with an error set

In [6]: np.__version__
Out[6]: '1.20.0.dev0+4771e3f'

Expected behavior

With NumPy<= 1.19

In [4]: a.dot(a)
Out[4]: <COO: shape=(4, 4), dtype=float64, nnz=0, fill_value=0.0>

System

  • OS and version: [MacOS 10.14.5]
  • sparse version (0.10.0+13.g2243192)
  • NumPy version ('1.20.0.dev0+4771e3f)
  • Numba version ('0.50.1')

Additional context Add any other context about the problem here.

It’s not clear to me yet if the issue is in sparse or numba. Do you have any tips for differentiating that?

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 15 (6 by maintainers)

Most upvoted comments

I think the systemerror is caused by the numba tuple boxer being broken.

The SystemError was raised due to that exception, which was the root cause.

Just replace the return line with

return np.empty((2, 0), dtype=np.intp), np.empty((0,), dtype=dtr)

The fact that this gives SystemError is a pretty strong indication that this is a numba bug.