Skip to content

Support for ndarray subclassing via view(type=...) #2764

@abagusetty

Description

@abagusetty

dpnp currently does not support creating subclasses of dpnp.ndarray using the .view(type=CustomClass) pattern that is standard in NumPy and CuPy. This limitation makes it difficult to port NumPy/CuPy code that relies on ndarray subclassing to dpnp.

Reproducer:

import dpnp

class MySubclass(dpnp.ndarray):
    pass

arr = dpnp.array([1, 2, 3])
sub = arr.view(type=MySubclass)  # NotImplementedError!

output:

Traceback (most recent call last):
  File "/home/abagusetty/gpu4pyscf-testing/gpu4pyscf/test_dpnp_subclass_v1.py", line 7, in <module>
    sub = arr.view(type=MySubclass)  # NotImplementedError!
  File "/home/abagusetty/gpu4pyscf-testing/dpnp/dpnp/dpnp_array.py", line 2355, in view
    raise NotImplementedError(
NotImplementedError: Keyword argument `type` is supported only with default value ``None``, but got <class '__main__.MySubclass'>.

Works fine with numpy & cupy:

import numpy as np
#import cupy as np

class MySubclass(np.ndarray):
    pass

arr = np.array([1, 2, 3])
sub = arr.view(MySubclass)
sub.custom = "test"

print(type(sub))           # <class '__main__.MySubclass'>
print(sub.custom)          # test
print(hasattr(sub, 'custom'))  # True

output:

<class '__main__.MySubclass'>
test
True

Use case:
This feature is essential for scientific computing libraries that need to:

  • Attach metadata to arrays: Track provenance, units, coordinate systems, etc.
  • Maintain compatibility with NumPy/CuPy code: Many libraries use subclassing for array tagging (eg. gpu4pyscf)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions