.. _onemkl_blas_tpmv:

tpmv
====

Computes a matrix-vector product using a triangular packed matrix.

Description
***********

The ``tpmv`` routines compute a matrix-vector product with a triangular
packed matrix. The operation is defined as:

.. math::

      x \leftarrow op(A)*x

where:

- op(``A``) is one of op(``A``) = ``A``, or op(``A``) = ``A``\ :sup:`T`, or op(``A``) = ``A``\ :sup:`H`

- ``A`` is ``n`` x ``n`` unit or non-unit, upper or lower triangular band matrix, supplied in packed form

- ``x`` is a vector of length ``n``

``tpmv`` supports the following precisions:

.. list-table::
   :header-rows: 1

   * -  T
   * -  ``float``
   * -  ``double``
   * -  ``std::complex<float>``
   * -  ``std::complex<double>``


tpmv (Buffer Version)
*********************

Syntax
------

.. code-block:: cpp

   namespace oneapi::mkl::blas::column_major {
       void tpmv(sycl::queue &queue,
                 oneapi::mkl::uplo upper_lower,
                 oneapi::mkl::transpose trans,
                 oneapi::mkl::diag unit_diag,
                 std::int64_t n,
                 sycl::buffer<T,1> &a,
                 sycl::buffer<T,1> &x,
                 std::int64_t incx)
   }

.. code-block:: cpp

   namespace oneapi::mkl::blas::row_major {
       void tpmv(sycl::queue &queue,
                 oneapi::mkl::uplo upper_lower,
                 oneapi::mkl::transpose trans,
                 oneapi::mkl::diag unit_diag,
                 std::int64_t n,
                 sycl::buffer<T,1> &a,
                 sycl::buffer<T,1> &x,
                 std::int64_t incx)
   }

Input Parameters
----------------

queue
   The queue where the routine should be executed.

upper_lower
   Specifies whether matrix ``A`` is upper or lower triangular. See :ref:`data-types` for more details.

trans
   Specifies op(``A``), the transposition operation applied to matrix ``A``. See :ref:`data-types` for more details.

unit_diag
   Specifies whether matrix ``A`` is unit triangular or not. See :ref:`data-types` for more details.

n
   Number of rows and columns of matrix ``A``. Must be at least zero.

a
   Buffer holding input matrix ``A``. Size of the buffer must be at least
   (``n``\ \*(``n``\ +1))/2. See :ref:`matrix-storage` for more details.

x
   Buffer holding input vector ``x``. Size of the buffer must be at
   least (1 + (``n`` - 1)\*abs(``incx``)). See :ref:`matrix-storage` for more details.

incx
   Stride of vector ``x``.

Output Parameters
-----------------

x
   Buffer holding updated vector ``x``.


tpmv (USM Version)
******************

Syntax
------

.. code-block:: cpp

   namespace oneapi::mkl::blas::column_major {
       sycl::event tpmv(sycl::queue &queue,
                        oneapi::mkl::uplo upper_lower,
                        oneapi::mkl::transpose trans,
                        oneapi::mkl::diag unit_diag,
                        std::int64_t n,
                        const T *a,
                        T *x,
                        std::int64_t incx,
                        const std::vector<sycl::event> &dependencies = {})
   }

.. code-block:: cpp

   namespace oneapi::mkl::blas::row_major {
       sycl::event tpmv(sycl::queue &queue,
                        oneapi::mkl::uplo upper_lower,
                        oneapi::mkl::transpose trans,
                        oneapi::mkl::diag unit_diag,
                        std::int64_t n,
                        const T *a,
                        T *x,
                        std::int64_t incx,
                        const std::vector<sycl::event> &dependencies = {})
   }

Input Parameters
----------------

queue
   The queue where the routine should be executed.

upper_lower
   Specifies whether matrix ``A`` is upper or lower triangular. See :ref:`data-types` for more details.

trans
   Specifies op(``A``), the transposition operation applied to matrix ``A``. See :ref:`data-types` for more details.

unit_diag
   Specifies whether matrix ``A`` is unit triangular or not. See :ref:`data-types` for more details.

n
   Number of rows and columns of matrix ``A``. Must be at least zero.

a
   Pointer to input matrix ``A``. Size of the array holding input matrix
   ``A`` must be at least (``n``\ \*(``n``\ +1))/2. See :ref:`matrix-storage` for more details.

x
   Pointer to input vector ``x``. Size of the array holding input vector
   ``x`` must be at least (1 + (``n`` - 1)\*abs(``incx``)).
   See :ref:`matrix-storage` for more details.

incx
   Stride of vector ``x``.

dependencies
   List of events to wait for before starting computation, if any. If
   omitted, defaults to no dependencies.

Output Parameters
-----------------

x
   Pointer to updated vector ``x``.

Return Values
-------------

Output event to wait on to ensure computation is complete.