.. _tensor: Tensor (``dpnp.tensor``) ======================== :mod:`dpnp.tensor` provides a reference implementation of the `Python Array API `_ specification. The implementation uses data-parallel algorithms suitable for execution on accelerators, such as GPUs. It also provides the underlying Array API-compliant implementation used by ``dpnp``. :mod:`dpnp.tensor` is written using C++ and `SYCL `_ and oneAPI extensions implemented in `Intel(R) oneAPI DPC++ compiler `_. Design and Motivation --------------------- The tensor implementation was originally developed as a standalone project and later integrated into the `dpctl `_ library as ``dpctl.tensor``. It has since been migrated into ``dpnp``, making ``dpnp`` the primary owner and development location of the tensor implementation. This change simplifies maintenance, reduces cross-project dependencies, and enables independent development and release cycles. Relationship to ``dpnp.ndarray`` -------------------------------- :class:`dpnp.ndarray` is a high-level array object built on top of :class:`dpnp.tensor.usm_ndarray`, storing array data in Unified Shared Memory (USM) allocated on a SYCL device. Most users interact with :class:`dpnp.ndarray` directly; :class:`dpnp.tensor.usm_ndarray` may appear in error messages or type signatures when working with device placement or interoperability. Relationship to ``dpctl`` ------------------------- The migration of ``dpctl.tensor`` into :mod:`dpnp.tensor` does not replace `dpctl `_ itself. ``dpctl`` remains responsible for device and queue management (:class:`dpctl.SyclDevice`, :class:`dpctl.SyclQueue`) as well as USM memory allocation. ``dpnp`` builds on top of these capabilities. Example ------- .. code-block:: python import dpnp import dpnp.tensor as dpt # Create a tensor array on the default device x = dpt.asarray([1.0, 2.0, 3.0]) # dpnp.ndarray wraps the underlying usm_ndarray a = dpnp.asarray([1.0, 2.0, 3.0]) assert isinstance(a.get_array(), dpt.usm_ndarray) .. seealso:: :ref:`dpnp.tensor API Reference `