From 8475e4315789c89eb4f7649194ebe7192a84186e Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Tue, 4 Nov 2025 21:40:28 +0100 Subject: [PATCH 1/2] Consider buffer offset when creating a view on ndarray --- dpnp/dpnp_array.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dpnp/dpnp_array.py b/dpnp/dpnp_array.py index beba058a998c..7a9e7823d194 100644 --- a/dpnp/dpnp_array.py +++ b/dpnp/dpnp_array.py @@ -96,6 +96,7 @@ def __init__( # or as USM memory allocation if isinstance(buffer, dpnp_array): buffer = buffer.get_array() + offset += buffer._element_offset if dtype is None and hasattr(buffer, "dtype"): dtype = buffer.dtype From 9c2953b830cc2b96b46768077b40f9ba632df6fe Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Tue, 4 Nov 2025 21:42:27 +0100 Subject: [PATCH 2/2] Add test coverage --- dpnp/tests/test_memory.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dpnp/tests/test_memory.py b/dpnp/tests/test_memory.py index ce9c7e60f030..1bc0da8c1535 100644 --- a/dpnp/tests/test_memory.py +++ b/dpnp/tests/test_memory.py @@ -31,3 +31,14 @@ def test_ndarray_from_data(self): a = dpnp.empty(5) b = dpnp.ndarray(a.shape, buffer=a.data) assert b.data.ptr == a.data.ptr + + def test_view_non_zero_offset(self): + n, m = 2, 8 + plane = n * m + + a = dpnp.empty(4 * plane) + sl = a[plane:] # non-zero offset view + + pl = dpnp.ndarray((n, m), dtype=a.dtype, buffer=sl) + assert pl.data.ptr == sl.data.ptr + assert a.data.ptr != sl.data.ptr