-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
It looks like I have hit an other corner case with indexing dpnp.ndarray with numpy indices. There has already been recent support for this and was wondering if someone look into this.
The following reproducer was extracted from an application with mimicking cupy's usage
import numpy as np
import dpnp as dpnp
import dpctl
print("dpnp:", dpnp.__version__)
print("dpctl:", dpctl.__version__)
# Simulate frr with shape (3, ngrids). Content is irrelevant; shape matters.
ngrids = 10240
frr = dpnp.arange(3 * ngrids, dtype=dpnp.float64).reshape(3, ngrids)
print("frr:", type(frr), frr.shape)
# This is done via a list-of-lists assigned as the index for one axis:
# slices[axis] = [[0, 1], [1, 2]]
def stack_frr_like(frr, axis=0):
slices = [slice(None)] * frr.ndim
# --- Case A: list-of-lists (exactly like PySCF) ---
slices[axis] = [[0, 1], [1, 2]]
print("\nCase A: list-of-lists index:", slices[axis], "(type:", type(slices[axis]), ")")
try:
out = frr[tuple(slices)]
print("Case A: OK, out.shape =", out.shape)
except Exception as e:
print("Case A: FAILED with:", repr(e))
# --- Case B: NumPy integer array index ---
slices = [slice(None)] * frr.ndim
slices[axis] = np.array([[0, 1], [1, 2]], dtype=np.intp)
print("\nCase B: NumPy array index dtype:", slices[axis].dtype, "(type:", type(slices[axis]), ")")
try:
out = frr[tuple(slices)]
print("Case B: OK, out.shape =", out.shape)
except Exception as e:
print("Case B: FAILED with:", repr(e))
# --- Case C: dpnp (device) integer array index (WORKAROUND) ---
slices = [slice(None)] * frr.ndim
slices[axis] = dpnp.asarray(np.array([[0, 1], [1, 2]], dtype=np.intp))
print("\nCase C: dpnp array index dtype:", slices[axis].dtype, "(type:", type(slices[axis]), ")")
try:
out = frr[tuple(slices)]
print("Case C: OK, out.shape =", out.shape)
except Exception as e:
print("Case C: FAILED with:", repr(e))
stack_frr_like(frr, axis=0)Metadata
Metadata
Assignees
Labels
No labels