Skip to content

dpctl raises exception with empty boolean array passed to __setitem__() #1913

@antonwolfy

Description

@antonwolfy

It seems dpctl doesn't handle a corner case properly when an empty boolean array passed through advanced indexing in __setitem__():

import numpy, dpctl, dpctl.tensor as dpt

dpctl.__version__
# Out: '0.19.0dev0+280.g4a94ef9c25'

numpy.__version__
# Out: '2.1.3'

a = dpt.ones((2, 3, 4))
a[dpt.asarray([], dtype=numpy.bool_)] = 1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[24], line 1
----> 1 a[dpt.asarray([], dtype=numpy.bool_)] = 1

File dpctl/tensor/_usmarray.pyx:1445, in dpctl.tensor._usmarray.usm_ndarray.__setitem__()

File /localdisk/work/antonvol/soft/miniforge3/envs/numpy_20/lib/python3.12/site-packages/dpctl/tensor/_copy_utils.py:928, in _place_impl(ary, ary_mask, vals, axis)
    926 rhs = dpt.broadcast_to(rhs, expected_vals_shape)
    927 dep_ev = _manager.submitted_events
--> 928 hev, pl_ev = ti._place(
    929     dst=ary,
    930     cumsum=cumsum,
    931     axis_start=pp,
    932     axis_end=pp + mask_nd,
    933     rhs=rhs,
    934     sycl_queue=exec_q,
    935     depends=dep_ev,
    936 )
    937 _manager.add_event_pair(hev, pl_ev)
    938 return

ValueError: Inconsistent array dimensions

# it works in NumPy
na[numpy.asarray([], dtype=numpy.bool_)] = 1

# and it works with integer array in dpctl:
a[dpt.asarray([], dtype=numpy.intp)] = 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions