Skip to content

Commit 298311e

Browse files
committed
Arm backend: Handle numpy scalars to int32
Interpret unsigned IO offsets from Vela as signed in direct_drive packing Signed-off-by: per.held@arm.com Change-Id: Ia1a65da12be56423119007dc71948459c58d7773
1 parent ef6ceae commit 298311e

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

backends/arm/arm_vela.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
has_vela = False
2121

2222

23+
def _as_int32(value, name: str) -> int:
24+
"""Convert numpy scalars to signed int32 with a clear error on overflow."""
25+
arr = np.asarray(value)
26+
if np.issubdtype(arr.dtype, np.unsignedinteger):
27+
# Interpret unsigned values as signed (e.g., uint64 max -> -1).
28+
arr = arr.astype(np.int64)
29+
v = int(arr)
30+
if v < -(2**31) or v > 2**31 - 1:
31+
raise ValueError(f"{name} out of int32 range: {v}")
32+
return v
33+
34+
2335
# Pack either input or output tensor block, compose the related arrays into
2436
# per-io structs to simplify runtime use.
2537
def vela_bin_pack_io(prefix, data):
@@ -30,9 +42,9 @@ def vela_bin_pack_io(prefix, data):
3042
ios = struct.pack("<i", len(vela_input_shapes))
3143
for i in range(len(vela_input_shapes)):
3244
io_shape = vela_input_shapes[i]
33-
io_elem_size = data[prefix + "_elem_size"][i]
34-
io_offset = data[prefix + "_offset"][i]
35-
io_region = data[prefix + "_region"][i]
45+
io_elem_size = _as_int32(data[prefix + "_elem_size"][i], f"{prefix}_elem_size")
46+
io_offset = _as_int32(data[prefix + "_offset"][i], f"{prefix}_offset")
47+
io_region = _as_int32(data[prefix + "_region"][i], f"{prefix}_region")
3648
if len(io_shape) != vela_io_shape_dims:
3749
raise ValueError(
3850
f"Expected {vela_io_shape_dims}D shape, got {len(io_shape)}D"

0 commit comments

Comments
 (0)