/**
\addtogroup arrayfire_func
@{

\defgroup blas_func_matmul matmul

Matrix multiplication.

Performs a matrix multiplication on the two input arrays after performing the
operations specified in the options. The operations are done while reading the
data from memory. This results in no additional memory being used for temporary
buffers.

Batched matrix multiplications are supported. The supported types of batch
operations for any given set of two matrices A and B are given below,

| Size of Input Matrix A     | Size of Input Matrix B     | Output Matrix Size          |
|:--------------------------:|:--------------------------:|:---------------------------:|
| \f$ \{ M, K,  1,  1 \} \f$ | \f$ \{ K, N,  1,  1 \} \f$ |  \f$ \{ M, N,  1,  1 \} \f$ |
| \f$ \{ M, K, b2, b3 \} \f$ | \f$ \{ K, N, b2, b3 \} \f$ |  \f$ \{ M, N, b2, b3 \} \f$ |
| \f$ \{ M, K,  1,  1 \} \f$ | \f$ \{ K, N, b2, b3 \} \f$ |  \f$ \{ M, N, b2, b3 \} \f$ |
| \f$ \{ M, K, b2, b3 \} \f$ | \f$ \{ K, N,  1,  1 \} \f$ |  \f$ \{ M, N, b2, b3 \} \f$ |

where `M`, `K`, `N` are dimensions of the matrix and `b2`, `b3` indicate batch
size along the respective dimension.

For the last two entries in the above table, the 2D matrix is broadcasted to
match the dimensions of 3D/4D array. This broadcast doesn't involve any additional
memory allocations either on host or device.

\note Sparse support was added to ArrayFire in v3.4.0. This function can be used
for Sparse-Dense matrix multiplication. See the notes of the function for usage
and restrictions.

\ingroup blas_mat

=======================================================================

\defgroup blas_func_dot dot

Compute the dot product.

Scalar dot product between two vectors, also referred to as the inner
product.

\ingroup blas_mat

=======================================================================

\defgroup blas_func_transpose transpose

Transpose a matrix.

Reverse or permute the dimensions of an array; returns the modified array.
For an array a with two dimensions, `transpose(a)` gives the matrix transpose.
For an array with more than two dimensions, the first two dimensions are
transposed across higher dimensions.

Set `conjugate=true` to perform the complex conjugate transpose of a matrix
which interchanges the row and column index for each element, reflecting the
elements across the main diagonal and negating the imaginary part of any
complex numbers. For example, if `b = transpose(a, true)` and element
`a(2, 1)` is `(1, 2)`, then element `b(1, 2)` is `(1, -2)`.

In-place versions perform matrix transposition by reordering the input,
reducing memory footprint.

__Examples:__

\snippet test/transpose.cpp ex_blas_func_transpose

\ingroup blas_mat
\ingroup manip_mat

=======================================================================

@}
*/
