Implement `dpnp.tensor.trace` per array API [spec](https://data-apis.org/array-api/2021.12/extensions/generated/array_api.linalg.trace.html). This could be an all top-level function: 1. Form a view into diagonals 2. Call `dpnp.tensor.sum` on the last axis of the view Possible implementation for `offset=0`: ```python def trace(ary): assert isinstance(ary, dpt.usm_ndarray) assert ary.ndim >= 2 res_shape = ary.shape[:-2] + (min(ary.shape[-2:]), ) res_strides = ary.strides[:-2] + (sum(ary.strides[-2:]),) view = dpt.usm_ndarray(res_shape, dtype=ary.dtype, buffer=ary, strides=res_strides) return dpt.sum(view, axis=-1, dtype=ary.dtype) ``` With sample usage: ``` In [4]: trace(dpt.ones((3,3,4,4))) Out[4]: usm_ndarray([[4., 4., 4.], [4., 4., 4.], [4., 4., 4.]], dtype=float32) ```
Activity